前提・実現したいこと
画像をCoreDataに保存し、アプリ再起動後にその画像を表示させたいです。
Swiftを始めて1ヶ月の初心者のため、ご教授いただけると幸いです。
【詳細】
Swiftで撮影した画像 or 端末のライブラリ画像をCoreDataに保存し、アプリ再起動後に保存した画像を再表示させる機能をつくっています。
以下のソースコードでは、エラーは発生していませんが、
画像を撮影 or 画像を選択後、アプリを再起動しても画像が表示されません。
また、アプリの動作は以下の通りです。
1.ボタンをタッチするとアクションシートが表示され、画像の取得方法を選択する。
2.画像を選択するとImageViewにその画像が表示される。
3.アプリを再起動すると、1で選択した画像が表示される。
【わかっていないこと】
・選択した画像は保存されているが、表示がうまくいっていないのか
・選択した画像がそもそも保存されていないのか
該当のソースコード
Swift
1 2import UIKit 3import CoreData 4 5class ViewController: UIViewController,UIImagePickerControllerDelegate, UINavigationControllerDelegate { 6 7 @IBOutlet weak var imageView: UIImageView! 8 @IBAction func actionSheet(_ sender: UIButton) { 9 //アクションシート 10 let actionSheet = UIAlertController(title: "", message: "画像を選んでください", preferredStyle: UIAlertController.Style.actionSheet) 11 //カメラ 12 let tappedCamera = UIAlertAction(title: "カメラで撮影する", style: UIAlertAction.Style.default, handler: {(action: UIAlertAction!) in self.takePhotos() 13 }) 14 //ライブラリ 15 let tappedLibrary = UIAlertAction(title: "ライブラリから選択する", style: UIAlertAction.Style.default, handler: {(action: UIAlertAction!) in self.choosePhotos() 16 }) 17 //キャンセル 18 let cancel = UIAlertAction(title: "キャンセル", style: UIAlertAction.Style.cancel, handler: {(action: UIAlertAction!) in print("キャンセル") 19 }) 20 21 actionSheet.addAction(tappedCamera) 22 actionSheet.addAction(tappedLibrary) 23 actionSheet.addAction(cancel) 24 25 present(actionSheet, animated: true, completion: nil) 26 } 27 28 //カメラを起動 29 func takePhotos() { 30 31 let camera = UIImagePickerController.SourceType.camera 32 33 if UIImagePickerController.isSourceTypeAvailable(camera){ 34 let picker = UIImagePickerController() 35 picker.sourceType = camera 36 picker.delegate = self 37 self.present(picker, animated: true, completion: nil) 38 } 39 } 40 41 //ライブラリを起動 42 func choosePhotos() { 43 let photoPick = UIImagePickerController() 44 photoPick.sourceType = .photoLibrary 45 photoPick.delegate = self 46 self.present(photoPick, animated: true, completion: nil) 47 } 48 49 //撮影した画像 or 選択した画像をimageViewに表示 50 func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]){ 51 52 let image = info[UIImagePickerController.InfoKey.originalImage] as! UIImage 53 self.imageView.image = image 54 55 //画像をコアデータへ保存 56 let photoCore = Photo(context: self.conText) 57 let imageData = UIImage.pngData(image) 58 photoCore.picture = imageData() 59 (UIApplication.shared.delegate as! AppDelegate).saveContext() 60 61 self.dismiss(animated: true, completion: nil) 62 } 63 64 var photo01:[Photo] = [] 65 var conText = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext 66 67 override func viewDidLoad() { 68 super.viewDidLoad() 69 // Do any additional setup after loading the view. 70 71 //画像の再表示 72 let fetchRequest = NSFetchRequest<NSManagedObject>(entityName: "Photo") 73 do{ 74 photo01 = try conText.fetch(fetchRequest as! NSFetchRequest<NSFetchRequestResult>) as! [Photo] 75 }catch{ 76 77 } 78 } 79 80}
補足情報(FW/ツールのバージョンなど)
Swift: version 5.1
Xcode: Version 11.1 (11A1027)
Mac OS: Mojave 10.14.6(18G103)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/17 10:57
2019/10/17 12:47