ViewControllerのTableViewにViewController1で表示したUIImageを保存したいのですがうまくいきません。ご指導を願い致します。
UserDefaultsを使用した、ローカルでの保存です。
ViewController
Swift
1コード 2 3import UIKit 4import Photos 5 6class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource,UIImagePickerControllerDelegate,UINavigationControllerDelegate { 7 8 let defaults = UserDefaults.standard 9 var saveArray: Array! = [NSData]() 10 var image: UIImage! 11 12 @IBOutlet weak var tableView: UITableView! 13 14 var resultArray = [String]() 15 16 17 18 override func viewDidLoad() { 19 super.viewDidLoad() 20 21 tableView.delegate = self 22 tableView.dataSource = self 23 24 } 25 26 27 28 override func viewWillAppear(_ animated: Bool) { 29 30 if defaults.object(forKey: "saveImage") != nil { 31 let objects = defaults.object(forKey: "saveImage") as? NSArray 32 33 saveArray.removeAll() 34 for data in objects! { 35 saveArray.append(data as! NSData) 36 } 37 } 38 tableView.reloadData() 39 } 40 41 42 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 43 44 return resultArray.count 45 46 } 47 48 func numberOfSections(in tableView: UITableView) -> Int { 49 50 return 1 51 52 } 53 54 55 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 56 57 let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) 58 59 cell.textLabel?.text = resultArray[indexPath.row] 60 61 return cell 62 } 63 64 65 func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 66 67 return 230 68 69 } 70 71 72 func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) { 73 74 if editingStyle == .delete{ 75 76 resultArray.remove(at: indexPath.row) 77 78 UserDefaults.standard.set(resultArray, forKey: "input") 79 80 tableView.reloadData() 81 82 } 83 84 } 85 86} 87 88 89
ViewController1
Swift
1import UIKit 2import Photos 3 4class ViewController1: UIViewController,UIImagePickerControllerDelegate,UINavigationControllerDelegate { 5 6 7 let defaults = UserDefaults.standard 8 var saveArray: Array! = [NSData]() 9 var image: UIImage! 10 11 12 @IBOutlet weak var backimageView: UIImageView! 13 14 15 override func viewDidLoad() { 16 super.viewDidLoad() 17 18 PHPhotoLibrary.requestAuthorization{ (status) in 19 20 switch(status){ 21 //場合分け 22 case .authorized: break 23 case .denied: break 24 case .notDetermined: break 25 case .restricted: break 26 27 } 28 29 } 30 31 } 32 33 func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) { 34 35 if let pickedImage = info[.originalImage] as? UIImage 36 { 37 backimageView.image = pickedImage 38 picker.dismiss(animated: true, completion: nil) 39 } 40 41 } 42 43 44 func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { 45 46 picker.dismiss(animated: true, completion: nil) 47 48 } 49 50 @IBAction func openAlbum(_ sender: Any) { 51 52 let sourceType :UIImagePickerController.SourceType = UIImagePickerController.SourceType.photoLibrary 53 54 if UIImagePickerController.isSourceTypeAvailable(UIImagePickerController.SourceType.photoLibrary){ 55 56 let cameraPicker = UIImagePickerController() 57 cameraPicker.sourceType = sourceType 58 cameraPicker.delegate = self 59 self.present(cameraPicker, animated: true, completion: nil) 60 61 } 62 } 63 64 65 66 @IBAction func compNext(_ sender: Any) { 67 68 //NSData型にキャスト 69 let data = image.pngData() as NSData? 70 if let imageData = data { 71 saveArray.append(imageData) 72 73 defaults.set(saveArray, forKey: "saveImage") 74 defaults.synchronize() 75 } 76 77 self.navigationController?.popViewController(animated: true) 78 79 } 80 81} 82 83
以下がStoryBoardです。
よろしくお願いいたします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/07/09 11:48