質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.48%

Swift 3 フォトライブラリから画像を選択して表示することが出来ない

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 4,639

score 149

実現したいこと

現在アプリ開発をしております。
フォトライブラリを開いて写真を選択した後に選択した
写真をViewControllerのUIImageViewに表示するといったことを実装したいです。

問題点

まず、ViewControllerにフォトライブラリを表示させるための
ボタンを配置しておりまして、そのボタンを押すとフォトライブラリが表示されて
写真を選択するとそのViewControllerに配置してあるUIImageViewに写真が表示されるという
仕組みなのですが
フォトライブラリを表示するボタンを押した瞬間クラッシュしてアプリが落ちてしまいます。

該当のエラーコード

libsystem_kernel.dylib`__abort_with_payload:     0x112749138 <+0>:  movl   $0x2000209, %eax          ; imm = 0x2000209      0x11274913d <+5>:  movq   %rcx, %r10     0x112749140 <+8>:  syscall  ->  0x112749142 <+10>: jae    0x11274914c               ; <+20> ←ここの行がエラーを吐きます。     0x112749144 <+12>: movq   %rax, %rdi     0x112749147 <+15>: jmp    0x112742d6f               ; cerror_nocancel     0x11274914c <+20>: retq 
    0x11274914d <+21>: nop  
    0x11274914e <+22>: nop  
    0x11274914f <+23>: nop  

エラーコードは Thred 5 : SIGNAL SIGABRT です。

該当のソースコード

import Foundation
import UIKit









class FirstViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {



    @IBOutlet weak var ShowImage: UIImageView!



    let userDefaults = UserDefaults.standard

    var Savehozon: String?

    var Savehozon2: String?





    @IBOutlet weak var MyText: UITextField!


    @IBOutlet weak var MyText2: UITextField!





        /*UserDefaultsの値をまとめて削除する

       let appDomain:String = Bundle.main.bundleIdentifier!


        UserDefaults.standard.removePersistentDomain(forName: appDomain)*/




   //ここから


    @IBAction func AddPic(_ sender: AnyObject) {






            let imagePickerController = UIImagePickerController()



        imagePickerController.sourceType = UIImagePickerControllerSourceType.photoLibrary


            imagePickerController.delegate = self



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



    }









    func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image: UIImage, editingInfo: [String : AnyObject]?){







        self.dismiss(animated: true, completion: nil )



        ShowImage.image = image





    }



    //ここまでがフォトライブラリ関連のコードです。

    @IBAction func AddAction(_ sender: AnyObject) {





        Savehozon2 = MyText2.text!

        Savehozon = MyText.text!

        if var result = userDefaults.object(forKey: "ReciveSave") as? Array<String> {
            result.append(Savehozon!)

            userDefaults.set(result, forKey:"ReciveSave")
        } else {
            userDefaults.set([Savehozon!], forKey:"ReciveSave")
        }

        userDefaults.synchronize()






        if var result2 = userDefaults.object(forKey: "ReciveSave2") as? Array<String> {


            result2.append(Savehozon2!)


            userDefaults.set(result2, forKey: "ReciveSave2")

        }else {

            userDefaults.set([Savehozon2!], forKey:"ReciveSave2")

        }


        userDefaults.synchronize()




    }



    override func viewDidLoad() {
        super.viewDidLoad()



    }

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        view.endEditing(true)
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }



}

試してみた事

グーグルなどで
フォトライブラリ関連のコードを探してみましたが
どれも、同じような内容で
どのコードも試したら該当のエラーコードを吐いてクラッシュしました。

アドバイスして頂きたい事

現在起こっている問題点が解決できますよう
アドバイスや手法を教えて頂けたらと思います。

開発環境

swift 3
Xcode 8
Mac Os Sierra

それでは、よろしくお願いいたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • 退会済みユーザー

    2016/10/12 15:20

    こちらの質問が他のユーザから「やってほしいことだけを記載した丸投げの質問」という指摘を受けました
    「質問を編集する」ボタンから編集を行い、調査したこと・試したことを記入していただくと、回答が得られやすくなります。

回答 1

checkベストアンサー

+1

This app has crashed because it attempted to access privacy-sensitive data without a usage description.  The app's Info.plist must contain an NSPhotoLibraryUsageDescription key with a string value explaining to the user how the app uses this data.

デバックエリアに上記のようなエラーで記載されているのでしたら、以下のサイトのやり方を参考にしてみてください。
※同じコードでplistNSPhotoLibraryUsageDescriptionのキーを設定すると落ちませんでした。

[iOS 10] 各種ユーザーデータへアクセスする目的を記述することが必須になるようです

 回答追記

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {

    // 選択された画像
    let selectImage = info[UIImagePickerControllerOriginalImage] as? UIImage
    ShowImage.image = selectImage
    self.dismiss(animated: true, completion: nil )
}

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/09/28 08:44

    ご回答ありがとうございます。

    plistに記載しましたところ
    エラーは無くなりました。

    ありがとうございます。


    しかしながら次は
    フォトライブラリにて選択した画像が
    UIImagViewに表示されません。

    コードの書き方が間違っているのでしょうか??

    もう少しだけご助力頂けると嬉しい限りでございます。

    何卒宜しくお願いいたします。


    キャンセル

  • 2016/09/28 12:33

    UIImagePickerControllerDelegateの使用するメソッドが違います、回答に追記しましたので参考にしてください。

    キャンセル

  • 2016/09/28 13:32



    無事できました。
    ありがとうございました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.48%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る