我正在从Obj-C过渡到Swift,我想我对它有相当好的理解? !概念。然而,我在一个nil的字段上遇到了糟糕的访问崩溃。
我正在使用
var cell :ContactIInfoTableViewCell!
cell = tableView.dequeueReusableCellWithIdentifier("notes", forIndexPath: indexPath) as! ContactIInfoTableViewCell
if let clinic = receivedVisitDetails?.clinicNotes {
cell.textLabel?.text = clinic
}
如果为空则会产生错误。我的理解是IF声明会阻止这个问题,但它没有。
我在这里做错了什么?
更新
这是核心数据获取的详细视图。
NSManagedObject
设为
var receivedVisitDetails: VisitDetails! = nil
上一个视图中的prepareForSeague
let visits:VisitDetails = fetchedResultsController.objectAtIndexPath(indexPath!) as! VisitDetails
taskController.receivedVisitDetails = visits
只有当clinNotes为空时才会发生崩溃。
答案 0 :(得分:1)
在所有编辑和评论之后,问题出现在:
@NSManaged var clinicNotes: String
它在您的Core Data模型中是可选的,但不在您的班级中。应改为:
@NSManaged var clinicNotes: String?
这是similar问题,Imanou建议mogenerator,它可以为您处理。它会为每个托管对象自动生成两个类。人体部分适合编辑(更新模型时未被生成器触及)并且机器不适合编辑(每次更新模型时都重写)。人体部分继承自机器部分。
每当我使用Core Data时,我都会使用它。我也强烈建议。您还可以将其添加到构建阶段,因此,它会在您构建项目时自动更新您的机器类。
答案 1 :(得分:-1)
使用此构造时,您不必使用?
,因为它是为您打开的。
试
if let clinic = receivedVisitDetails.clinicNotes {
cell.textLabel?.text = clinic
}