【问题标题】:Getting NSInternalInconsistencyException during iOS app runtime在 iOS 应用运行时获取 NSInternalInconsistencyException
【发布时间】:2016-09-14 18:07:04
【问题描述】:

在将代码库从 Swift 2 升级到 Swift 3 后,我最近将我的应用从 Xcode 7 迁移到了 Xcode 8。该应用程序编译良好,但在运行时我得到以下异常。

不知道这里需要做什么。

例外:

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!
}

【问题讨论】:

  • tableView:cellForRowAtIndexPath: 中的代码是什么?您是否在代码中注册了您的单元格?在故事板中?
  • 刚刚用更多代码更新了我的问题,以便您获得更好的见解
  • 你找到解决办法了吗?
  • 不,还没有..
  • 您可能会在这里找到答案stackoverflow.com/questions/40157812/…

标签: ios swift xcode uitableview applepay


【解决方案1】:

您可能会在这里找到答案 stackoverflow.com/questions/40157812/

“发生错误是因为 cellForRowAtIndexPath 的签名错误。在 Swift 3 中是

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

并使用方便的方法

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

它总是返回一个有效的非可选单元格。"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-06
    • 2012-08-04
    • 1970-01-01
    • 1970-01-01
    • 2014-11-06
    • 1970-01-01
    • 2021-02-12
    • 1970-01-01
    相关资源
    最近更新 更多