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

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

新規登録して質問してみよう
ただいま回答率
85.51%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

2917閲覧

tableViewでセルの削除機能を追加した結果エラーが出てしまいました

comet0310

総合スコア59

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

1クリップ

投稿2016/10/08 10:26

tableViewでデータをセル上に乗せることには成功しましたがtableViewの編集機能を追加した結果エラーが出てしまいました。
追加したのは次の文です。

func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {

//削除の場合、配列からデータを削除する。 if( editingStyle == UITableViewCellEditingStyle.delete) { part.remove(at: indexPath.row) pass.remove(at: indexPath.row) userDefaults.removeObject(forKey: part[indexPath.row]) userDefaults.removeObject(forKey: pass[indexPath.row]) } //テーブルの再読み込み tableView.reloadData() }

ちなみに削除したデータはuserDefaultsを使って保存したデータです。

次のコードのlet cell:UITableViewCell=tableView.dequeueReusableCell(withIdentifier: "MyCell", for: indexPath)の行でエラーが出てしまいました。

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell:UITableViewCell=tableView.dequeueReusableCell(withIdentifier: "MyCell", for: indexPath)
cell.textLabel!.text=part[indexPath.row]
return cell
}

thread1:EXC_Bad_Instructionというエラーです。

セルの生成のコードでエラーが起きたということはセルを消したことによって本来の盤面との違いからエラーが起きたと思いtableView.reloadData()を記述したのですが変化ありません。
解決方法を教えてくださると幸いです

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

コードが一部なのでなんとも言い切れないのですが、セルの登録がちゃんとできていないということが可能性の一つに挙げられます。
見たところ、partとpassがString型の配列のようですね。であれば、その配列の中身をkeyに指定しているところが少し理解できません。partとpassの中身を操作した後に、その配列ごと保存・上書していく、という方法が良いと思います。

とりあえず、セルを削除する例文を作りました。新規プロジェクトでコピペして貰えば動きます。

Swift3.0

1import UIKit 2 3class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource{ 4 5 let userDefaults = UserDefaults.standard 6 7 var part:[String] = ["あああ","いいい","ううう"] 8 var pass:[String] = ["AAA","BBB","CCC"] 9 10 override func viewDidLoad() { 11 super.viewDidLoad() 12 13 var tableView = UITableView() 14 tableView.delegate = self 15 tableView.dataSource = self 16 tableView.frame = CGRect(x: 50, y: 50, width: 300, height: 500) 17 tableView.register(UITableViewCell.self, forCellReuseIdentifier: "MyCell") 18 tableView.isEditing = true 19 self.view.addSubview(tableView) 20 21 userDefaults.set(part, forKey:"key1") 22 userDefaults.set(pass, forKey:"key2") 23 } 24 25 func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { 26 27 //削除の場合、配列からデータを削除する。 28 if( editingStyle == UITableViewCellEditingStyle.delete) { 29 part.remove(at: indexPath.row) 30 pass.remove(at: indexPath.row) 31 32 userDefaults.set(part, forKey:"key1") 33 userDefaults.set(pass, forKey:"key2") 34 } 35 36 print(userDefaults.object(forKey: "key1")) 37 print(userDefaults.object(forKey: "key2")) 38 39 //テーブルの再読み込み 40 tableView.reloadData() 41 } 42 43 44 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 45 let cell:UITableViewCell=tableView.dequeueReusableCell(withIdentifier: "MyCell", for: indexPath) 46 cell.textLabel!.text = part[indexPath.row]+pass[indexPath.row] 47 return cell 48 } 49 50 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 51 return part.count 52 } 53 54 override func didReceiveMemoryWarning() { 55 super.didReceiveMemoryWarning() 56 // Dispose of any resources that can be recreated. 57 } 58 59 60} 61 62

投稿2016/10/09 10:07

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問