Failed to obtain a cell from its dataSource
前提・実現したいこと
「TableViewでTEST1を選択(タップしViewControllerに画面遷移する)したとする。
その時、遷移先のViewControllerで、TEST1と1(配列name2において、TEST1と同じ順番)をUILabelで表示させる。」
上記の内容を実現したいと考えております。
発生している問題・エラーメッセージ
2019-04-07 22:53:01.658174+0900 TEST[41654:1641268] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'UITableView (<UITableView: 0x7fbb2b850a00; frame = (0 0; 414 896); clipsToBounds = YES; autoresize = W+H; gestureRecognizers = <NSArray: 0x600002f10300>; layer = <CALayer: 0x600002107b40>; contentOffset: {0, -88}; contentSize: {414, 176}; adjustedContentInset: {88, 0, 34, 0}>) failed to obtain a cell from its dataSource (<TEST.TableViewController: 0x7fbb2ac0a290>)'
*** First throw call stack:
(
0 CoreFoundation 0x0000000107fd06fb __exceptionPreprocess + 331
1 libobjc.A.dylib 0x000000010658bac5 objc_exception_throw + 48
2 CoreFoundation 0x0000000107fd0482 +[NSException raise:format:arguments:] + 98
3 Foundation 0x0000000105fd9927 -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 194
4 UIKitCore 0x000000010aa8d99f -[UITableView _configureCellForDisplay:forIndexPath:] + 433
5 UIKitCore 0x000000010aaa06bf -[UITableView _createPreparedCellForGlobalRow:withIndexPath:willDisplay:] + 911
6 UIKitCore 0x000000010aaa0b65 -[UITableView _createPreparedCellForGlobalRow:willDisplay:] + 73
7 UIKitCore 0x000000010aa68d20 -[UITableView _updateVisibleCellsNow:isRecursive:] + 2870
8 UIKitCore 0x000000010aa88e37 -[UITableView layoutSubviews] + 165
9 UIKitCore 0x000000010ad359c1 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 1417
10 QuartzCore 0x000000010c2a6eae -[CALayer layoutSublayers] + 173
11 QuartzCore 0x000000010c2abb88 _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 396
12 QuartzCore 0x000000010c2b7ee4 _ZN2CA5Layer28layout_and_display_if_neededEPNS_11TransactionE + 72
13 QuartzCore 0x000000010c2273aa _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 328
14 QuartzCore 0x000000010c25e584 _ZN2CA11Transaction6commitEv + 608
15 UIKitCore 0x000000010a880ccb __34-[UIApplication _firstCommitBlock]_block_invoke_2 + 128
16 CoreFoundation 0x0000000107f37aec __CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ + 12
17 CoreFoundation 0x0000000107f372b0 __CFRunLoopDoBlocks + 336
18 CoreFoundation 0x0000000107f31b34 __CFRunLoopRun + 1252
19 CoreFoundation 0x0000000107f31302 CFRunLoopRunSpecific + 626
20 GraphicsServices 0x000000010fb692fe GSEventRunModal + 65
21 UIKitCore 0x000000010a867ba2 UIApplicationMain + 140
22 TEST 0x0000000105ca5cfb main + 75
23 libdyld.dylib 0x00000001093d8541 start + 1
24 ??? 0x0000000000000001 0x0 + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb)
該当のソースコード
import UIKit
class TableViewController: UITableViewController {
//cellのlabelに代入するString
let name1:[String] = ["TEST1","TEST2","TEST3","TEST4"]
let name2:[String] = ["1","2","3","4"]
override func viewDidLoad() {
super.viewDidLoad()
// Uncomment the following line to preserve selection between presentations
// self.clearsSelectionOnViewWillAppear = false
// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
// self.navigationItem.rightBarButtonItem = self.editButtonItem
}
//遷移先のViewControllerに渡す変数
var giveData: String = ""
var giveData2:String = ""
//sectionの数を返す数
override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
// sectionの数を返す関数乗せる
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if section == 0{
return name1.count
// }else if section == 1{
// return name2.count
//
}else{
return 0
}
//sectionの高さを返す
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 40
}
//sectionに載せる文字列を返す関数
func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
return "section\(section)"
}
//cellの情報を書き込む関数
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "TableViewCell", for: indexPath) as! TableViewCell
//ここでcellのlabelに値を入れる
if indexPath.section == 0{
cell.name.text = name1[indexPath.item]
// }else{
// cell.name.text = name2[indexPath.item]
// }
return cell
}
// cellが押されたときに呼ばれる関数
// 画面遷移の処理もここで書いている
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
//押された時のcellのlabelの文字列をViewControllerに渡したいので、giveDataに入れる
if indexPath.section == 0{
giveData = name1[indexPath.item]
giveData2 = name2[indexPath.item]
}
print(indexPath)
// else{
//
// }
//Segueを使った画面遷移をおこな関数
performSegue(withIdentifier: "Segue", sender: nil)
}
//遷移先のViewControllerにデータを渡す関数
func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "Segue"{
let vc = segue.destination as! ViewController
vc.receiveData = giveData
vc.receiveData2 = giveData2
}
}
// MARK: - Table view data source
// override func numberOfSections(in tableView: UITableView) -> Int {
// // #warning Incomplete implementation, return the number of sections
// return 0
// }
//
// override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// // #warning Incomplete implementation, return the number of rows
// return 0
// }
/*
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifier", for: indexPath)
// Configure the cell...
return cell
}
*/
/*
// Override to support conditional editing of the table view.
override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
// Return false if you do not want the specified item to be editable.
return true
}
*/
/*
// Override to support editing the table view.
override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
if editingStyle == .delete {
// Delete the row from the data source
tableView.deleteRows(at: [indexPath], with: .fade)
} else if editingStyle == .insert {
// Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
}
}
*/
/*
// Override to support rearranging the table view.
override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) {
}
*/
/*
// Override to support conditional rearranging of the table view.
override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool {
// Return false if you do not want the item to be re-orderable.
return true
}
*/
/*
// MARK: - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// Get the new view controller using segue.destination.
// Pass the selected object to the new view controller.
}
*/
}
}
}
試したこと
breakpointを打ち、上記のコードから、問題の箇所を探しました。しかし、最後の}でエラーが出たものの、
それより前ではエラーが出ません。
定数や変数の代入には問題が内容に見えます。
補足情報(FW/ツールのバージョンなど)
Xcode Version 10.2 (10E125)