我有UITableViewController
通过NSFetchedResultsController
从Core Data加载其条目。像这样:
let historyItem = fetchedResults.objectAtIndexPath(indexPath) as HistoryItem
historyItem
的{{1}}属性定义如下:
title
所以在代码中@NSManaged var title: String
cellForRowAtIndexPath
这一切都应该没问题。 cell?.textLabel?.text = historyItem.title
不是可选的,不需要解包。
但是,在过去,存储的Core Data已经获取了title
属性的值为title
的一些对象。它们存在,等待导致错误。如果其中一个对象显示在单元格中,我将在上面的Swift代码行中看到运行时地址异常,其中地址为0。
为了健壮,我需要编写代码以确保传送到我的程序的存储数据不会导致崩溃。但是,我不能写
nil
因为if historyItem.title == nil { } // gives compiler error
不是可选的,编译器不会让我。如果我写
title
我仍然在该行上获得运行时let optionalTitle:String? = historyItem.title
。
如何检查EXC_BAD_ACCESS
错误是否为空?
谢谢!
答案 0 :(得分:0)
由于您有nil值,title
属性应该是可选的,您应该在核心数据模型和NSManagedObject
historyItem类中将其声明为可选。
答案 1 :(得分:0)
当我在编辑器中执行此操作时,我不会收到错误,因此可能是答案:
let a = ""
if a as String? == nil {
println("Nil")
}
else {
println("Not nil")
}
答案 2 :(得分:0)
@NSManaged var title: String
应为@NSManaged var title: String?
。然后,可选绑定不会出错:
if let historyItemTitle = historyItem.title {
cell?.textLabel?.text = historyItemTitle
} else {
cell?.textLabel?.text = "Title missing"
}