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

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

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

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

解決済

TableViewで、データソースから読み込めないと表示される(failed to obtain a cell from its dataSource)

kackey621
kackey621

総合スコア18

Swift

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

2回答

0評価

0クリップ

1298閲覧

投稿2019/04/07 14:05

前提・実現したいこと

「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)

該当のソースコード

Swift

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)

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

t_obara

2019/04/07 20:10

}の対応がおかしいです。よく見直してください。XCodeのエディタで確認するとわかりそうですが。
kackey621

2019/04/08 05:10

ありがとうございます。 解決できました。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Swift

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