###実現したいこと
アプリを開発しておりまして
プロフィール設定画面で情報を入力して
保存ボタンを押すとその情報が保存されて
さらにその後遷移ボタンを押して
遷移するたびに
遷移先のページで先ほど入力した情報が載った
TableCellがひとつずつ増えていくといった感じの処理をしています。
そこで、テキストラベルだけでしたら
遷移するたびに、 TabelCellが増えていくのですが
これに写真も組み合わせて
遷移元で入力したテキスト内容と
選択した写真を保存して遷移ボタンを押して遷移するたびに
遷移先で先ほど入力した情報が載ったTableViewCellをひとつずつ増やしていくといったことがしたいです。
###問題点
先ほども申しましたがテキストラベルに入力した内容は遷移するごとに
遷移先のTableCellにそのテキストを乗っけてひとつずつ増やしていくことはできております。
しかし、同じようなことを写真付きでやると
アプリがエラー落ちしてしまいます。
しかしながら原因は突き止めて
おります。
まず、最初に値は全てUserDefautsにて出し入れしております。
そして、値を引き渡すための変数はReciveDataで管理しています。
このうち二つのテキストラベルにはそれぞれReciveData1とReciveData2で管理しています。
UIImageに関しましては、ReciveData3で管理しております。
そして、エラーログで確認したのですが
二つのテキストラベルに関しては
ReciveData1とReciveData2それぞれ
どちらもValueが2でした。
しかしながらUIimageのReciveData3だけ、Valueが1のままでした。
つまりValueが全て噛み合ってないことが原因だと思っています。
それが証拠に、一回目の遷移時には問題なく
写真とテキストが両方のったCellが遷移先にてきちんと追加されておりました。
###アドバイスして頂きたいこと
では、なぜ二回目からの遷移でアプリが
落ちてしまうのかと言いますとこれも断定は
出来ませんが、おそらく配列
としてきちんとUIImageを処理できてないからだと思います。
今回、二つのテキストラベルは配列として
処理をしております。
しかしながら、UIImageに関してましてはただNSDataに変換して
UserDefautに保存して
遷移先でUIImageに復元して、UserDefautsを読み込んで表示させるだけでした。
おそらくこれがいけなかったんだと思います。
そこで、UIimageをNSDataに変換した後
ArrayとしてNSDataをUserDefautsに保存しました。
ここまでは良かったのですが
次はこのNSDataをArrayとしてUserDefaultsから
読み込んでさらにUIImageに復元といった処理を書こうとしているのですが
どうも、ソースコードに赤字エラーや黄色エラーが出て
うまくいきません。
ですので、Arrayとして保存したNSDataを
Arrayとして読み込んだあとに、NSDataをUIImageに変換するといった書き方を
教えて頂ければと思います。
###該当のソースコード
Swift
1import Foundation 2import UIKit 3 4 5 6 7class FirstViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate { 8 9 10 11 12 var selectImage: UIImage! 13 14 15 16 var stockimage: [Data] = [] 17 18 19 20 21 22 23 var ipc: UIImagePickerController! 24 25 26 27 28 let userDefaults = UserDefaults.standard 29 30 var Savehozon: String? 31 32 var Savehozon2: String? 33 34 35 36 37 38 @IBOutlet weak var MyText: UITextField! 39 40 41 @IBOutlet weak var MyText2: UITextField! 42 43 44 45 46 47 //UserDefaultsの値をまとめて削除する 48 49 50 51 52 @IBAction func Deletkey(_ sender: AnyObject) { 53 54 let appDomain:String = Bundle.main.bundleIdentifier! 55 56 57 UserDefaults.standard.removePersistentDomain(forName: appDomain) 58 59 60 61 } 62 63 64 65 func pickImageFromLibrary() { 66 67 if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.photoLibrary) { 68 69 70 ipc = UIImagePickerController() 71 72 73 ipc.delegate = self 74 75 76 ipc.sourceType = UIImagePickerControllerSourceType.photoLibrary 77 78 79 self.present(ipc, animated: true, completion: nil) 80 81 82 83 84 } 85 86 87 } 88 89 90 91 92 @IBAction func AddPic(_ sender: AnyObject) { 93 94 95 96 pickImageFromLibrary() 97 98 99 100 101 } 102 103 104 105 106 @IBAction func AddAction(_ sender: AnyObject) { 107 108 109 110 Savehozon2 = MyText2.text! 111 112 Savehozon = MyText.text! 113 114 115 116 117 118 if var result = userDefaults.object(forKey: "ReciveSave") as? Array<String> { 119 result.append(Savehozon!) 120 121 userDefaults.set(result, forKey:"ReciveSave") 122 } else { 123 userDefaults.set([Savehozon!], forKey:"ReciveSave") 124 } 125 126 userDefaults.synchronize() 127 128 129 130 131 132 133 if var result2 = userDefaults.object(forKey: "ReciveSave2") as? Array<String> { 134 135 136 result2.append(Savehozon2!) 137 138 139 userDefaults.set(result2, forKey: "ReciveSave2") 140 141 }else { 142 143 userDefaults.set([Savehozon2!], forKey:"ReciveSave2") 144 145 } 146 147 148 userDefaults.synchronize() 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 } 178 179 180 181 override func viewDidLoad() { 182 super.viewDidLoad() 183 184 } 185 186 187 188 189 190 override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 191 view.endEditing(true) 192 } 193 194 override func didReceiveMemoryWarning() { 195 super.didReceiveMemoryWarning() 196 } 197 198 199 200 201 202 func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { 203 204 205 206 207 208 209 selectImage = info[UIImagePickerControllerOriginalImage] as! UIImage! 210 211 212 213 214 215 216 217 if let henkan = UIImageJPEGRepresentation(selectImage!, 1){ 218 219 220 221 222 stockimage = [henkan] 223 224 225 226 227 228 229 userDefaults.set([henkan], forKey: "imageData") 230 231 232 233 } 234 235 236 237 self.dismiss(animated: true, completion: nil ) 238 239 240 241 242 243 } 244 245 246 247 248 249} 250 251 252
Swift
1import Foundation 2import UIKit 3 4 5 6class SecondViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 7 8 9 10 var ReciveData: [String] = [] 11 12 var ReciveData2: [String] = [] 13 14 var ReciveData3: [UIImage] = [] 15 16 var result3: [Data] = [] 17 18 var PassData: Data! 19 20 21 22 23 24 25 26 27 28 let userDefaults = UserDefaults.standard 29 30 31 32 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 33 34 35 36 37 let cell = tableView.dequeueReusableCell(withIdentifier: "MyCell", for:indexPath) 38 39 let label = cell.viewWithTag(2) as! UILabel 40 41 label.text = ReciveData[indexPath.row] 42 43 44 45 46 47 let label2 = cell.viewWithTag(3) as! UILabel 48 49 label2.text = ReciveData2[indexPath.row] 50 51 52 53 let imageset = cell.viewWithTag(4) as! UIImageView 54 55 56 57 imageset.image = ReciveData3[indexPath.row] 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 return cell 79 80 81 82 83 84 } 85 86 87 88 89 90 91 92 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 93 94 95 return ReciveData2.count 96 97 98 } 99 100 101 102 103 override func viewDidLoad() { 104 super.viewDidLoad() 105 106 107 108 109 110 if let result = userDefaults.object(forKey: "ReciveSave") as? Array<String>{ 111 112 113 ReciveData = result 114 115 } 116 117 118 119 120 121 if let result2 = userDefaults.object(forKey: "ReciveSave2") as? Array<String>{ 122 123 124 125 ReciveData2 = result2 126 127 128 } 129 130 131 132 133 134 135 136 137 if let result3 = userDefaults.object(forKey: "imageData") as? Array<Data>{ 138 139 140 141 142 PassData = result3 as! Data 143 144 145 146 147 let ActiveImage2: UIImage? = UIImage(data: PassData) 148 149 150 151 ReciveData3.append(ActiveImage2!) 152 153 154 155 156 157 } 158 159 160 161 162 163 } 164 165 166 167 168 169 170 override func didReceiveMemoryWarning() { 171 super.didReceiveMemoryWarning() 172 173 } 174 175 176} 177 178 179
###開発環境
Xcode8
Swift3
iMac Sierra
よろしくお願いいたします。

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/10/09 09:09