2016-06-20 18 views
26

FYI:これは本当に簡単な問題かもしれないので、私はそれを把握できませんので、スイフトの新しいです。UIImagePickerControllerがクラッシュする| Swift3、Xcode8

私はXcodeの8ベータ版を使用してStart Developing iOS Apps (Swift)チュートリアル次されているとスウィフト3

私はイメージビューにタップジェスチャー認識装置を取り付け、その後、ViewController.swiftでこのアクションを追加しました:

@IBAction func selectImageFromPhotoLibrary(_ sender: UITapGestureRecognizer) { 
     // Hide the keyboard. 
     nameTextField.resignFirstResponder() 

     // UIImagePickerController is a view controller that lets a user pick media from their photo library. 
     let imagePickerController = UIImagePickerController() 

     // Only allow photos to be picked, not taken. 
     imagePickerController.sourceType = .photoLibrary 

     // Make sure ViewController is notified when the user picks an image. 
     imagePickerController.delegate = self 

     present(imagePickerController, animated: true, completion: nil) 
    } 

画像ビューのタップでselectImageFromPhotLibraryアクションが呼び出されると、ImagePickerを表示せずにアプリケーションがクラッシュします。

は、私はこの問題は

import UIKit 

class ViewController: UIViewController, UITextFieldDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate { 

    // MARK: Properties 
    @IBOutlet weak var mealNameLabel: UILabel! 
    @IBOutlet weak var nameTextField: UITextField! 
    @IBOutlet weak var photoImageView: UIImageView! 


    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 

     // Handle the text field´s user input through delegate callbacks 
     nameTextField.delegate = self 
    } 

    // MARK: UITextFieldDelegate 
    func textFieldShouldReturn(_ textField: UITextField) -> Bool { 
     // Hide the keyboard. 
     textField.resignFirstResponder() 
     return true 
    } 

    func textFieldDidEndEditing(_ textField: UITextField) { 
     mealNameLabel.text = textField.text 
    } 

    // MARK: UIImagePickerControllerDelegate 
    func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { 
     // Dismiss the picker if the user canceled. 
     dismiss(animated: true, completion: nil) 
    } 

    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) { 
     // The info dictionary contains multiple representations of the image, and this uses the original. 
     let selectedImage = info[UIImagePickerControllerOriginalImage] as! UIImage 

     // Set photoImageView to display the selected image. 
     photoImageView.image = selectedImage 

     // Dismiss the picker. 
     dismiss(animated: true, completion: nil) 
    } 


    // MARK: Actions 

    @IBAction func selectImageFromPhotoLibrary(_ sender: UITapGestureRecognizer) { 
     // Hide the keyboard. 
     nameTextField.resignFirstResponder() 

     // UIImagePickerController is a view controller that lets a user pick media from their photo library. 
     let imagePickerController = UIImagePickerController() 

     // Only allow photos to be picked, not taken. 
     imagePickerController.sourceType = .photoLibrary 

     // Make sure ViewController is notified when the user picks an image. 
     imagePickerController.delegate = self 

     present(imagePickerController, animated: true, completion: nil) 
    } 

    @IBAction func setDefaultLabelText(_ sender: UIButton) { 
     mealNameLabel.text = "Default Text" 
    } 


} 


コンソール出力

ViewController.swift

スウィフト3


で導入された新しい 存在の代わりに、 presentViewControllerであることを推測します
2016-06-20 17:08:20.568093 FoodTracker[33322:696094] bundleid: com.armin.FoodTracker, enable_level: 0, persist_level: 0, propagate_with_activity: 0 
2016-06-20 17:08:20.569458 FoodTracker[33322:696094] subsystem: com.apple.UIKit, category: HIDEvents, enable_level: 0, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 0, privacy_setting: 0 
2016-06-20 17:08:20.604909 FoodTracker[33322:696090] Created DB, header sequence number = 288 
2016-06-20 17:08:20.668341 FoodTracker[33322:696090] Created DB, header sequence number = 288 
2016-06-20 17:08:20.743143 FoodTracker[33322:696090] subsystem: com.apple.BaseBoard, category: MachPort, enable_level: 0, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 0, privacy_setting: 0 
2016-06-20 17:08:20.769881 FoodTracker[33322:696091] subsystem: com.apple.FrontBoard, category: Common, enable_level: 0, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 0, privacy_setting: 0 
2016-06-20 17:08:22.007665 FoodTracker[33322:695971] subsystem: com.apple.UIKit, category: Touch, enable_level: 0, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 0, privacy_setting: 0 
2016-06-20 17:08:22.009799 FoodTracker[33322:695971] subsystem: com.apple.UIKit, category: Gesture, enable_level: 0, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 0, privacy_setting: 0 
2016-06-20 17:08:22.012973 FoodTracker[33322:695971] subsystem: com.apple.UIKit, category: GestureEnvironment, enable_level: 0, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 0, privacy_setting: 0 
2016-06-20 17:08:22.013820 FoodTracker[33322:695971] subsystem: com.apple.UIKit, category: GestureExclusion, enable_level: 0, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 0, privacy_setting: 0 
2016-06-20 17:08:23.061815 FoodTracker[33322:695971] subsystem: com.apple.photos, category: Generic, enable_level: 0, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 0, privacy_setting: 0 
+1

エラーについて投稿するときは、エラーを投稿すると便利だと思います。 – Alexander

+0

間違ったメソッドを呼び出します。 self.presentViewController(imagePickerController、animated:true、completed:nil) – abraaoan

+0

@AMomchilovエラーメッセージはありません。アプリがちょうど終了/クラッシュ – ARS

答えて

53

は、あなたのinfo.plistにそれをだ

Key : Privacy - Photo Library Usage Description [ NSPhotoLibraryUsageDescription ] 
String Value : We need access to your camera roll and photo library, so that we can do operations on it. [ Customise it in your own way] 

Clean & Runプロジェクトをこのキーを追加します。

メディア、場所、フォトライブラリ、アラーム、モーション、カレンダー、ブルートゥース、HomeKit、カメラ、コンタクトなど。そして価値 -

enter image description here

+2

ありがとうございました。多くの時間と不満を払っています –

+0

値を 'YES'に設定しません。ユーザーに表示される短いメッセージに設定します。 – rmaddy

+0

@rmaddyそうですね、彼らは新しいXcodeでそれを変更しました。私は自分の答えを修正しました。 –

15

はXcodeで8新しいキーがためにプライバシーを追加しますあなたがアクセスするプライバシーについての説明です。 「機能を実現するためにフォトライブラリを使用するためのアクセス権が必要」またはANY_YOUR_APP_RELATED_DESCRIPTIONです。

enter image description here

+0

tnx、視覚化を手助けしました –

+1

なぜ値が「はい」に設定されていますか?それらはユーザーに表示される短いメッセージでなければなりません。 – rmaddy

9

だけでなくカメラの使用のために必要なカメラキーと値を気づきました。 Info.plistファイルにする必要があり、カメラと写真のライブラリの両方に必要な

キー:

<key>NSCameraUsageDescription</key> 
<string>Access needed to use your camera.</string> 

<key>NSPhotoLibraryUsageDescription</key> 
<string>Access needed to photo gallery.</string> 
0

私はプライバシーのメッセージを追加しようとしたが、それらは私のために動作しませんでした。次に、イメージ要素自体の属性インスペクタを調べて、以前にチェックが外されていた「ユーザーインタラクションを有効にする」ボックスをチェックしました。これを実行した後、ピッカーが働きました。誰かを助けることを願っています。

+0

私にとっては却下は機能していません。 「写真を使う」ボタンをクリックすると、カメラが何度もポップアップします。それを動作させる方法はありますか? –

関連する問題