###開発環境
- Swfit3
- Xcode8
###実現したい事
現在アプリを開発しています。
遷移元の二つのテキストフィールドに文字を入力してボタンを押すと
二つのテキストフィールドの値がUserDefaultsに保存されて
遷移先のページでUserDdfaultsを読み込み
遷移先のページのTableViewCellに二つ配置してあるラベルを二つとも書き換えるといった事がしたいです。
ちなみに、現段階では一つ目のラベルの文字を書き換えるということはできております。
###問題点
しかしながら、もう片方のラベルの値を書き換える事ができておりません。
ラベルの値は両方とも配列からindexPath.rowで取得してきております。
しかし、配列から値を取り出すときに両方の配列にindexpath.rowを指定して
配列を取り出そうとしたらアプリがクラッシュして落ちてしまいます。
###試してみた事
配列から値を取り出すときにindexpath.rowで値を取り出すのではなく0や1を指定してみましたけど
アプリはクラッシュしませんでしたが
遷移元のテキストフィールドで値を入力したにもかかわらず
遷移先のもう片方のラベルは全くかわっておりませんでした。
###アドバイスして頂きたい事
遷移先のページに配置してあるラベルを両方とも変更できるよう
アドバイスして頂けたらと思います。
また、差し支えないようでしたら
indexpath.rowの扱い方をざっとで構いませんので
教えて頂けたらと思います。
Swift
1 2//遷移元のViewControllerです。 3import Foundation 4import UIKit 5 6class FirstViewController: UIViewController{ 7 8 9 10 let userDefaults = UserDefaults.standard 11 12 var Savehozon: String? 13 14 var Savehozon2: String? 15 16 17 18 19 20 @IBOutlet weak var MyText: UITextField! 21 22 @IBOutlet weak var MyText2: UITextField! 23 24 25 @IBAction func AddAction(_ sender: AnyObject) { 26 27 28 29 Savehozon2 = MyText2.text! 30 31 Savehozon = MyText.text! 32 33 34 35 36 //ここから 37 38 if var result = userDefaults.object(forKey: "ReciveSave") as? Array<String> { 39 result.append(Savehozon!) 40 41 userDefaults.set(result, forKey:"ReciveSave") 42 } else { 43 userDefaults.set([Savehozon!], forKey:"ReciveSave") 44 } 45 46 userDefaults.synchronize() 47 48 //ここまでが一つ目のラベルを書き換えるためのuserdefaultsのコードです。 49 50 51 52 //ここから 53 if var result2 = userDefaults.object(forKey: "ReciveSave2") as? Array<String> { 54 55 56 result2.append(Savehozon2!) 57 58 59 userDefaults.set(result2, forKey: "ReciveSave2") 60 61 }else { 62 63 userDefaults.set([Savehozon2!], forKey:"ReciveSave2") 64 65 } 66 67 68 userDefaults.synchronize() 69 70 //ここまでが二つ目のUserDefaultsを書き換えるためのUserdefaultsのコードです。 71 72 73 74 75 76 77 } 78 79 80 override func viewDidLoad() { 81 super.viewDidLoad() 82 83 84 85 } 86 87 override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 88 view.endEditing(true) 89 } 90 91 override func didReceiveMemoryWarning() { 92 super.didReceiveMemoryWarning() 93 } 94 95 96 97 98 99 100 101} 102 103 104 105 106 107 108
Swift
1 2 3 4//遷移先のViewControllerです。 5import Foundation 6import UIKit 7 8 9 10class SecondViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 11 12 13 14 var ReciveData: [String] = [] 15 16 17 var ReciveData2: [String] = [] 18 19 20 21 22 23 let userDefaults = UserDefaults.standard 24 25 26 27 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 28 29 30 31 32 let cell = tableView.dequeueReusableCell(withIdentifier: "MyCell", for:indexPath) 33 34 let label = cell.viewWithTag(1) as! UILabel 35 //ここで一つ目のラベルを書き換えいます。 36 label.text = ReciveData[indexPath.row] 37 38 39 40 /*ここで二つ目のラベルを書き換えるための処理を書いたつもりなのですが 41 ここで、エラーが起きてアプリがクラッシュしてしまいます。 42 エラーコードはThred1 Exc_Bad Instraction(code=EXCi386?INVOP. sub 43 code= 0x0)です。*/ 44 let label2 = cell.viewWithTag(2) as! UILabel 45 46 label2.text = ReciveData2[indexPath.row] 47 48 49 50 51 return cell 52 53 54 55 56 57 } 58 59 60 61 62 63 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 64 65 66 67 68 69 70 71 return ReciveData.count 72 73 74 75 76 77 78 79 80 81 } 82 83 84 85 86 87 88 89 90 91 override func viewDidLoad() { 92 super.viewDidLoad() 93 94 95 96 if let result = userDefaults.object(forKey: "ReciveSave") as? Array<String>{ 97 98 99 ReciveData = result 100 101 } 102 103 104 if let result2 = userDefaults.object(forKey: "ReciveSave2") as? Array<String>{ 105 106 107 108 ReciveData2 = result2 109 110 111 112 113 114 115 } 116 117 118 119 120 121 122 123 } 124 125 126 127 128 129 130 override func didReceiveMemoryWarning() { 131 super.didReceiveMemoryWarning() 132 133 } 134 135 136 137 138} 139 140 141 142
以上でございます。
それでは、よろしくお願い致します。
###追記
記載するの忘れてました。
Swiftのバージョンは3です
xcodeは8です。
宜しくお願い致します。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/09/23 08:33
2016/09/23 09:07
2016/09/23 09:29
2016/09/23 09:56
2016/09/23 10:10
2016/09/23 10:26
2016/09/23 11:12
2016/09/23 11:40