Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Uitableview 启动app xCode时EXC\u错误\u指令断点_Uitableview_Swift - Fatal编程技术网

Uitableview 启动app xCode时EXC\u错误\u指令断点

Uitableview 启动app xCode时EXC\u错误\u指令断点,uitableview,swift,Uitableview,Swift,我的应用程序中有一个tableview,当我启动应用程序时,它会在以下功能上崩溃 func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! { // Configure the cell... let cellId: NSString = "Cell" var cell: UITableViewCell = ta

我的应用程序中有一个tableview,当我启动应用程序时,它会在以下功能上崩溃

func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {
    // Configure the cell...
    let cellId: NSString = "Cell"
    var cell: UITableViewCell = tableView.dequeueReusableCellWithIdentifier(cellId) as UITableViewCell
}
它在
var单元格

它给出了以下错误:

我不知道我的代码出了什么问题

整个功能:

func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {
    // Configure the cell...
    let cellId: NSString = "Cell"
    var cell: UITableViewCell = tableView.dequeueReusableCellWithIdentifier(cellId) as UITableViewCell

    let data: NSManagedObject = mylist[ip.row] as NSManagedObject

    cell.textLabel.text = data.valueForKeyPath("voornaam") as String
    cell.detailTextLabel.text = data.valueForKeyPath("achternaam") as String
    return cell
}
编辑: 我现在得到的:(仍然给出相同的错误)


首先,如果让ip=indepath,为什么要在第
行执行可选绑定?此参数不是可选的,您不需要执行可选的绑定或展开。但这不应该导致代码崩溃


删除
让数据
行,并将文字字符串分配给单元格,看看它是否仍然崩溃。

之所以发生这种情况,是因为定义了
as
操作符将对象强制转换为给定类型,并在转换失败时崩溃。在这种情况下,对
dequeue
的调用在您第一次调用它时返回
nil
。您需要使用
as?
运算符,该运算符将尝试将给定对象强制转换为类型,并返回一个只有在转换成功时才具有值的可选值:

var cell: UITableViewCell? = tableView.dequeueReusableCellWithIdentifier(cellId) as? UITableViewCell

if cell == nil {
  cell = UITableViewCell(style: .Subtitle, reuseIdentifier: cellId)
}

...
由于
cell
现在是可选值,请使用
cell
当您想对其调用方法以强制展开其中的
UITableViewCell


此外,您的代码还有第二个问题:它从未创建新的单元格
dequeue
第一次在表视图上调用时将返回nil。您需要实例化一个新的
UITableViewCell
,就像在我的代码示例中一样,然后从
cellFor…
方法返回它。然后,表格视图将保存单元格,并在以后调用
dequeue

时将其返回。我建议您检查一下是否设置了表格视图的委托?我在匆忙安排其他事情的过程中犯过一次错误。

也许已经太晚了,但我愿意分享我的经验。当我从另一个项目复制整个代码时,出现了类似的错误。所以我认为变量和函数不会被识别,所以我不得不拖动它们(cntr+drag),然后就解决了。
对不起,如果我不能更好地解释的话。我是新来的

我首先让它可选,但实际上我不需要可选绑定如果我分配文字字符串,它不会再崩溃,并且还删除了可选绑定为什么要使用
valueForKeyPath
而不是
valueForKey
?这不是原因,我认为它们基本上是一样的。但改变这一点并不能解决问题您的ViewController似乎还可以。我会检查
mylist
,最可能的是您的核心数据设置、模型或实体。您可以使用更多详细信息更新问题。
dequeueReusableCellWithIdentifier
如果单元格设置正确,则始终返回单元格。文档中说:“如果现有单元格可用,此方法将其出列,或者使用您以前注册的类或nib文件创建一个新单元格。如果没有可重用的单元格,并且您没有注册类或nib文件,此方法将返回nil。”我想你必须在iOS 6之前手动检查并创建手机。谢谢你的回复!我尝试了你的解决方案,但不幸的是我得到了同样的错误。@Bas它仍然在同一条线上崩溃,还是现在不同了?Swift是一种比Objective-C严格得多的语言,因此您的另一个
as
调用可能会导致问题。@E.Parto当您说“始终”时,您的意思是“在某些情况下”。@Bill yes它仍然在同一行上崩溃。Tableview委托和数据源已设置!2个想法:首先,尝试清理你的项目(cmd+shift+k)。如果这不起作用,试着看一看,如果你有任何删除。
var cell: UITableViewCell? = tableView.dequeueReusableCellWithIdentifier(cellId) as? UITableViewCell

if cell == nil {
  cell = UITableViewCell(style: .Subtitle, reuseIdentifier: cellId)
}

...