

### 前提・実現したいこと

「TableViewでTEST1を選択(タップしViewControllerに画面遷移する)したとする。  
その時、遷移先のViewControllerで、TEST1と1(配列name2において、TEST1と同じ順番)をUILabelで表示させる。」  
上記の内容を実現したいと考えております。

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

[code]

    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) 
    
[/code]

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

[code]

    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.
        }
        */
    
    }
    }
    }
    
    
    
[/code]

### 試したこと

breakpointを打ち、上記のコードから、問題の箇所を探しました。しかし、最後の}でエラーが出たものの、  
それより前ではエラーが出ません。  
定数や変数の代入には問題が内容に見えます。

### 補足情報（FW/ツールのバージョンなど）

Xcode Version 10.2 (10E125)


CC BY-SA 4.0
2019-04-08T02:15:41.610
54006
2019-04-08T05:08:38.640
32831
question
swift4
Failed to obtain a cell from its dataSource


自己解決しました。  
}の位置を正したことで解決しました。


CC BY-SA 4.0
2019-04-08T05:08:38.640
54010
2019-04-08T05:08:38.640
32831
54006
answer