Swift:当变量不是可选时处理意外的 nil 值

标签 swift null option-type

<分区>

我有一个 UITableViewController 通过 NSFetchedResultsController 从 Core Data 加载它的条目。像这样:

let historyItem = fetchedResults.objectAtIndexPath(indexPath) as HistoryItem

historyItem 有一个 title 属性定义如下:

@NSManaged var title: String

所以在 cellForRowAtIndexPath 中,代码说

cell?.textLabel?.text = historyItem.title

那应该没问题。 title 不是可选的,不需要解包。

但是,在过去,存储的 Core Data 获取了一些 title 属性值为 nil 的对象。它们存储在那里,等待导致错误。如果这些对象之一显示在单元格中,我将在上面的 Swift 代码行中看到运行时地址异常,其中地址为 0。

为了稳健性,我需要编写代码来确保传送到我的程序的存储数据不会导致崩溃。但是,我不能写

if historyItem.title == nil { } // gives compiler error

因为 title 不是可选的,编译器不允许。如果我写

let optionalTitle:String? = historyItem.title

我仍然在该行上得到运行时 EXC_BAD_ACCESS

我如何检查 title 不是错误的 nil?

谢谢!

最佳答案

因为你有 nil 值,title 属性应该是可选的,你应该在你的核心数据模型和你的 NSManagedObject historyItem 类中声明它是可选的。

关于Swift:当变量不是可选时处理意外的 nil 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29029542/

相关文章:

ios - UIBarButtonItem 是蓝色而不是图像

c# - 替换 C# 读取的 CSV 文件中的所有空值

JavaOptional.ifPresentOrElse 带返回值

ios - 由于未捕获的异常 'NSInvalidArgumentException' 而终止应用程序 - ios google 登录

swift - 检查结构中的任何属性是否为 nil - Swift 4

mysql - 在 MySQL 中将表中的所有负值更新为 NULL 的最有效方法

exception - Grails - 无法在空对象上调用方法 getAt()

swift - 展开变量哪个不是可选的?

Scala选项类型上限不明白

swift - 如何从其他文件夹引用类