前提・実現したいこと
Todoリストを作成しているのですが、セルタップによるタスク編集を実装途中に以下のエラーでビルドができなくなってしまいました。そのエラーを解消したいです。
発生している問題・エラーメッセージ
エラーは以下の部分で表示されています。(AppDelegate.swift)
下はデバック画面になります。
class AppDelegate: UIResponder, UIApplicationDelegate { < Tread 1:signal SIGABRT 2018-12-14 17:21:28.889 TaskControl[6327:955929] *** Assertion failure in -[UITableView dequeueReusableCellWithIdentifier:forIndexPath:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3600.6.21/UITableView.m:6600 2018-12-14 17:21:28.907 TaskControl[6327:955929] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'unable to dequeue a cell with identifier TaskCell - must register a nib or a class for the identifier or connect a prototype cell in a storyboard' *** First throw call stack: ( 0 CoreFoundation 0x000000010e127d4b __exceptionPreprocess + 171 1 libobjc.A.dylib 0x000000010b00121e objc_exception_throw + 48 2 CoreFoundation 0x000000010e12be42 +[NSException raise:format:arguments:] + 98 3 Foundation 0x000000010ab9666d -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 195 4 UIKit 0x000000010ba4c1e8 -[UITableView dequeueReusableCellWithIdentifier:forIndexPath:] + 259 5 TaskControl 0x000000010aa03981 _TFC11TaskControl14ViewController9tableViewfTCSo11UITableView12cellForRowAtV10Foundation9IndexPath_CSo15UITableViewCell + 353 6 TaskControl 0x000000010aa041e7 _TToFC11TaskControl14ViewController9tableViewfTCSo11UITableView12cellForRowAtV10Foundation9IndexPath_CSo15UITableViewCell + 87 7 UIKit 0x000000010ba5f584 -[UITableView _createPreparedCellForGlobalRow:withIndexPath:willDisplay:] + 757 8 UIKit 0x000000010ba5f7e2 -[UITableView _createPreparedCellForGlobalRow:willDisplay:] + 74 9 UIKit 0x000000010ba332b0 -[UITableView _updateVisibleCellsNow:isRecursive:] + 3295 10 UIKit 0x000000010ba68b64 -[UITableView _performWithCachedTraitCollection:] + 110 11 UIKit 0x000000010ba4f3be -[UITableView layoutSubviews] + 222 12 UIKit 0x000000010b9b6ab8 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 1237 13 QuartzCore 0x0000000110f8fbf8 -[CALayer layoutSublayers] + 146 14 QuartzCore 0x0000000110f83440 _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 366 15 QuartzCore 0x0000000110f832be _ZN2CA5Layer28layout_and_display_if_neededEPNS_11TransactionE + 24 16 QuartzCore 0x0000000110f11318 _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 280 17 QuartzCore 0x0000000110f3e3ff _ZN2CA11Transaction6commitEv + 475 18 QuartzCore 0x0000000110f3ed6f _ZN2CA11Transaction17observer_callbackEP19__CFRunLoopObservermPv + 113 19 CoreFoundation 0x000000010e0cc267 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 23 20 CoreFoundation 0x000000010e0cc1d7 __CFRunLoopDoObservers + 391 21 CoreFoundation 0x000000010e0b08a6 CFRunLoopRunSpecific + 454 22 UIKit 0x000000010b8ebaea -[UIApplication _run] + 434 23 UIKit 0x000000010b8f1c68 UIApplicationMain + 159 24 TaskControl 0x000000010aa0bc0f main + 111 25 libdyld.dylib 0x000000010f0d768d start + 1 26 ??? 0x0000000000000001 0x0 + 1 ) libc++abi.dylib: terminating with uncaught exception of type NSException (lldb)
該当のソースコード
関係のなさそうなコードは削りました、、
swift
1 2//ViewController 3 4import UIKit 5import CoreData 6 7class ViewController: UIViewController , UITableViewDataSource, UITableViewDelegate { 8 9 // MARK: - Properties 10 11 @IBOutlet weak var taskTableView: UITableView! 12 13 var tasks:[Task] = [] 14 var tasksToShow:[String:[String]] = ["MustDo":[], "WantToDo":[]] 15 let taskCategories:[String] = ["MustDo", "WantToDo"] 16 17 private let segueEditTaskViewController = "SegueEditTaskViewController" 18 19 20 // MARK: - View Life Cycle 21 22 23 override func viewDidLoad() { 24 super.viewDidLoad() 25 taskTableView.dataSource = self 26 taskTableView.delegate = self 27 } 28 29 override func viewWillAppear(_ animated: Bool) { 30 31 getData() 32 33 34 taskTableView.reloadData() 35 } 36 // MARK: - Method of Getting data from Core Data 37 38 func getData() { 39 40 let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext 41 do { 42 43 let fetchRequest: NSFetchRequest<Task> = Task.fetchRequest() 44 tasks = try context.fetch(fetchRequest) 45 46 47 for key in tasksToShow.keys { 48 tasksToShow[key] = [] 49 } 50 51 for task in tasks { 52 tasksToShow[task.category!]?.append(task.name!) 53 } 54 } catch { 55 print("Fetching Failed.") 56 } 57 } 58 59 // MARK: - Table View Data Source 60 61 62 func numberOfSections(in tableView: UITableView) -> Int { 63 return taskCategories.count 64 } 65 func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? { 66 return taskCategories[section] 67 } 68 69 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 70 return tasksToShow[taskCategories[section]]!.count 71 } 72 73 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 74 guard let cell = taskTableView.dequeueReusableCell(withIdentifier: TaskTableViewCell.reuseIdentifier, for: indexPath) as? TaskTableViewCell else { 75 fatalError("Unexpected Index Path") 76 } 77 78 let sectionData = tasksToShow[taskCategories[indexPath.section]] 79 let cellData = sectionData?[indexPath.row] 80 81 cell.taskLabel.text = "(cellData!)" 82 83 return cell 84 } 85 86 // MARK: - Navigation 87 88 override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 89 guard let destinationViewController = segue.destination as? AddTaskViewController else { return } 90 91 92 let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext 93 destinationViewController.context = context 94 if let indexPath = taskTableView.indexPathForSelectedRow, segue.identifier == segueEditTaskViewController { 95 96 let editedCategory = taskCategories[indexPath.section] 97 let editedName = tasksToShow[editedCategory]?[indexPath.row] 98 99 let fetchRequest: NSFetchRequest<Task> = Task.fetchRequest() 100 fetchRequest.predicate = NSPredicate(format: "name = %@ and category = %@", editedName!, editedCategory) 101 102 do { 103 let task = try context.fetch(fetchRequest) 104 destinationViewController.task = task[0] 105 } catch { 106 print("Fetching Failed.") 107 } 108 } 109 } 110} 111 112//TaskTableViewController 113 114import UIKit 115 116class TaskTableViewCell: UITableViewCell { 117 118 // MARK: - Properties 119 120 static let reuseIdentifier = "TaskCell" 121 122 // MARK: - 123 @IBOutlet var taskLabel: UILabel! 124 125 126 127 // MARK: - Initialization 128 129 override func awakeFromNib() { 130 super.awakeFromNib() 131 // Initialization code 132 } 133 134 override func setSelected(_ selected: Bool, animated: Bool) { 135 super.setSelected(selected, animated: animated) 136 137 // Configure the view for the selected state 138 } 139} 140 141//AddTaskViewController 142 143import UIKit 144class AddTaskViewController: UIViewController { 145 // MARK: - Properties 146 var context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext 147 var task: Task? 148 @IBOutlet weak var taskTextField: UITextField! 149 @IBOutlet weak var categorySegmentedControl: UISegmentedControl! 150 // MARK: - 151 var taskCategory = "MustDo" 152 override func viewDidLoad() { 153 super.viewDidLoad() 154 if let task = task { 155 taskTextField.text = task.name 156 taskCategory = task.category! 157 switch task.category! { 158 case "MustDo": 159 categorySegmentedControl.selectedSegmentIndex = 0 160 case "WantToDo": 161 categorySegmentedControl.selectedSegmentIndex = 1 162 default: 163 categorySegmentedControl.selectedSegmentIndex = 0 164 } 165 } 166 } 167 // MARK: - Actions of Button 168 169
試したこと
すべてコネクトし直し、xcodeの再起動も行いましたが治りませんでした。。。
補足情報(FW/ツールのバージョンなど)
swift 3
xcode 8.2.1
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/12/14 23:37