2016-09-14 6 views
1

コードベースをSwift 2からSwift 3にアップグレードした後、最近私のアプリケーションをXcode 7からXcode 8に移行しました。アプリはうまくコンパイルされますが、実行時に例外を受けています。iOSアプリランタイム中にNSInternalInconsistencyExceptionを取得する

ここで何をする必要があるのか​​分かりません。

例外:

2016-09-14 14:00:16.098 ApplePaySwag[5762:122585] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', 
reason: 'UITableView (<UITableView: 0x7fb361823600; frame = (0 0; 375 667); clipsToBounds = YES; opaque = NO; autoresize = W+H; 
gestureRecognizers = <NSArray: 0x608000049f60>; 
layer = <CALayer: 0x608000035100>; contentOffset: {0, -64}; contentSize: {375, 665}>) failed to obtain a cell from its dataSource (<ApplePaySwag.SwagListViewController: 0x7fb3614068e0>)' 
*** First throw call stack: 
(
0 CoreFoundation      0x00000001050dd34b __exceptionPreprocess + 171 
1 libobjc.A.dylib      0x0000000104a5f21e objc_exception_throw + 48 
2 CoreFoundation      0x00000001050e1442 +[NSException raise:format:arguments:] + 98 
//code removed for brevity 
libc++abi.dylib: terminating with uncaught exception of type NSException 

SwagListViewController.swift

import UIKit 

class SwagListViewController: UITableViewController { 

    var swagList = [ 
     Swag( image: UIImage(named: "iGT"), 
       title: "iOS Games by Tutorials", 
       price: 54.00, 
       type: SwagType.Electronic, 
       description: "This book is for beginner to advanced iOS developers. Whether you are a complete beginner to making iOS games, or an advanced iOS developer looking to learn about Sprite Kit, you will learn a lot from this book!"), 

    // code removed for brevity 

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath as IndexPath) as! SwagCell 

     let object = swagList[indexPath.row] 
     cell.titleLabel.text = object.title 
     cell.priceLabel.text = "$" + object.priceString 
     cell.swagImage.image = object.image 
     return cell 
    } 

    func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
     if segue.identifier == "showDetail" { 
      let object = swagList[self.tableView.indexPathForSelectedRow!.row] 
     (segue.destination as! BuySwagViewController).swag = object 
     } 
    } 

} 

SwagCell.swift

import UIKit 

class SwagCell: UITableViewCell { 
    @IBOutlet weak var titleLabel: UILabel! 
    @IBOutlet weak var priceLabel: UILabel! 
    @IBOutlet weak var swagImage: UIImageView! 
} 
+0

あなたのコードは 'のtableViewに何:cellForRowAtIndexPath:?'あなたをしましたストーリーボードでは?コードであなたのセルを登録する? – Larme

+0

あなたは解決策を発見した方が良い洞察 – user2325154

+0

を得ることができるようにちょうどいくつかのより多くのコードで私の質問を更新しました? –

答えて

-1

あなたマイルGHT見つけるここにあなたの答えstackoverflow.com/questions/40157812/

「cellForRowAtIndexPathの署名が間違っているため、エラーが発生しました。スウィフト3ではそれが

(override) func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 

、常に有効な非オプションのセルを返す簡易メソッド

let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for:indexPath) 

を使用するのです「

関連する問題