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

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

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

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

Q&A

解決済

1回答

1744閲覧

ToDoリストを作っているのですが、Thread 1:EXC_BAD_INSTRUCTIONとエラーが出る

hik_

総合スコア42

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

0グッド

0クリップ

投稿2017/06/15 04:34

###前提・実現したいこと
初心者のためSwift3でToDoリストの作り方を学習しようとネットで見て作っているのですが、コードを書き終えて、シュミュレーターを起動すると以下のエラーが出て終了してしまいます。

###発生している問題・エラーメッセージ

下のコードの return tasksToShow[taskCategories[sention]]!.count の所にThread 1: EXC_BAD_INSTRUCTION(code=EXC_I386_INVOP.subcode=0×0) とエラーが出てしまいます。

###該当のソースコード

import UIKit import CoreData class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { // MARK: - Properties @IBOutlet weak var taskTableView: UITableView! // MARK: - Properties for table view var tasks:[Task] = [] var tasksToShow:[String:[String]] = ["ToDo":[], "Shopping":[], "Assignment":[]] let taskCategories:[String] = ["Todo", "Shopping", "Assignment"] // MARK: - View Life Cycle override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. taskTableView.dataSource = self taskTableView.delegate = self } override func viewWillAppear(_ animated: Bool) { // CoreDataからデータをfetchしてくる getData() // taskTableViewを再読み込みする taskTableView.reloadData() } // MARK: - Method of Getting data from Core Data func getData() { // データ保存じと同様にcontextを定義 let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext do { // CoreDataからデータをfetchしてtasksに格納 let fetchRequest: NSFetchRequest<Task> = Task.fetchRequest() tasks = try context.fetch(fetchRequest) // tasksToShow配列を空にする。(同じデータを複数表示しないため) for key in tasksToShow.keys { tasksToShow[key] = [] } // 先ほどfetchしたデータをtasksToShow配列に格納する for task in tasks { tasksToShow[task.category!]?.append(task.name!) } } catch { print("Fetching Failed") } } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } // MARK: - Table View Data Source // taskCategories[]に格納されいているTableViewのセクションになる func numberOfSections(in tableView: UITableView) -> Int { return taskCategories.count } func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? { return taskCategories[section] } // taskToShowにカテゴリー(taskToShowのキーとなっている)ごとのnameが格納されいている func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return tasksToShow[taskCategories[section]]!.count } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = UITableViewCell() let sectionData = tasksToShow[taskCategories[indexPath.section]] let cellData = sectionData?[indexPath.row] cell.textLabel?.text = "\(String(describing: cellData))" return cell } }

###試したこと
エラーを検索したり数時間前から解決を試みているのですが、解決がしません。ご教授お願いします。

###補足情報(言語/FW/ツール等のバージョンなど)
Swift3 Xcode8.3.3

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

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

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

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

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

guest

回答1

0

ベストアンサー

キー名タイポで、存在しないディクショナリキーでアクセスしてるのでは?

Swift

1 var tasksToShow:[String:[String]] = ["ToDo":[], "Shopping":[], "Assignment":[]] 2 //let taskCategories:[String] = ["Todo", "Shopping", "Assignment"] 3 let taskCategories:[String] = ["ToDo", "Shopping", "Assignment"] 4

投稿2017/06/15 05:29

fromageblanc

総合スコア2724

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

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

hik_

2017/06/15 08:59

ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問