在展开可选值时迅速并意外发现 nil

Posted

技术标签:

【中文标题】在展开可选值时迅速并意外发现 nil【英文标题】:swift and unexpectedly found nil while unwrapping an Optional value 【发布时间】:2016-02-21 11:57:31 【问题描述】:

我有一堂课:

class ListOfEventsController: UIViewController, UITableViewDataSource, UITableViewDelegate 

它包含一个函数:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 

    let cell = tableView.dequeueReusableCellWithIdentifier("CELL") as! SingleEventCell

当我运行它时 - 它会导致错误提示

fatal error: unexpectedly found nil while unwrapping an Optional value

但是当我去我的故事板时,我看到:

当我点击CELL 时,我会在其属性中看到:

还有:

所以CELL 的标识符已设置,但我仍然收到此错误。

我还能做什么?

【问题讨论】:

改变你的 if cell = ...... 到 if let cell = ......... 尝试 dequeueReusableCellWithIdentifier:forIndexPath 方法 @sateesh 我试过了,但是当我运行应用程序时,我看到 Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'unable to dequeue a cell with identifier CELL - must register a nib or a class for the identifier or connect a prototype cell in a storyboard' 这很奇怪,因为 - 正如你在我的屏幕截图中看到的 - CELL 被用作标识符......跨度> 在你的视图中注册一个笔尖确实加载方法,这个错误是在说类似的事情 我看到您在下面选择了一个答案。正如我在另一个问题中所知道的那样,这是否解决了您的问题,这没有帮助。 【参考方案1】:
    在 Storyboard 中选择您的原型单元 alt + cmd + 4 打开属性检查器CELL 写入Identifier 字段。

然后再试一次;)

【讨论】:

谢谢,但这正是我一开始所做的 :) 只需检查我原始问题中的最后一个屏幕截图 - 它与您的完全相同;) @user3766930:好的,那么请尝试清理整个项目:Xcode > Product > Clean。然后重置模拟器并重试。 这就是我正在做的事情:imgur.com/a/vZl26 是故事板中的错误字段吗? 不幸的是,清理在这里没有帮助,我必须做错事,但我不知道这里有什么问题...... @user3766930:据我所知,你做的一切都是对的。您确定故事板中定义的UITableView 是您在代码中使用的SAME UITableView【参考方案2】:
[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"CELL"];

解决你的问题。

【讨论】:

你应该先注册一个类,然后再将你的单元格放入 cellforrowatindexpath 谢谢,你能给我一个更大的提示吗? :) 我不知道该怎么办,抱歉 :( 如果单元格是在情节提要中设计的,则不需要。【参考方案3】:

试试

let cell = tableView.dequeueReusableCellWithIdentifier("CELL", forIndexPath: indexPath) as! SingleEventCell

【讨论】:

我收到一条错误消息:'unable to dequeue a cell with identifier CELL - must register a nib or a class for the identifier or connect a prototype cell in a storyboard' 您是否单击了故事板中的原型单元并将其命名为 CELL?对于命名约定,在故事板和上述代码中重命名“CELL”>“Cell”

以上是关于在展开可选值时迅速并意外发现 nil的主要内容,如果未能解决你的问题,请参考以下文章

UIPickerView:在展开可选值时意外发现 nil

prepareForSegue 出错“”在展开可选值时意外发现 nil“”

Alamofire:在展开可选值时意外发现 nil

为啥我收到错误:致命错误:在展开可选值时意外发现 nil?

插座已连接,但在展开可选值时意外发现 nil

NSString 到 String 抛出“致命错误:在展开可选值时意外发现 nil”