即使有检查,空值也会出现 Swift 错误访问错误

标签 swift

我正在从 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 语句会阻止这个问题,但事实并非如此。

我在这里做错了什么?

enter image description here

更新

这是核心数据获取的详细 View 。

NSManagedObject 设置为

var receivedVisitDetails: VisitDetails! = nil

上一个 View 中的prepareForSeague

let visits:VisitDetails = fetchedResultsController.objectAtIndexPath(indexPath!) as! VisitDetails
            taskController.receivedVisitDetails = visits

只有当 clinicNotes 为空时才会发生崩溃。

最佳答案

经过所有的编辑和评论,问题出在:

@NSManaged var clinicNotes: String

它在您的 Core Data 模型中是可选的,但在您的类中不是。应该改为:

@NSManaged var clinicNotes: String?

这是 similar Imanou 建议的问题 mogenerator ,它可以为您处理。它会自动为每个托管对象生成两个类。人的部分适合编辑(更新模型时不被 mogenerator 触及),机器不适合编辑(每次更新模型时都会重写)。人的部分继承自机器的部分。

每当我使用 Core Data 时,我都会使用它。我也强烈建议这样做。您还可以将它添加到构建阶段,因此,它会在您构建项目时自动更新您的机器类。

关于即使有检查,空值也会出现 Swift 错误访问错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31338550/

相关文章:

带有Xcode 11.2.1的swift_initClassMetadataImpl EXC_BAD_ACCESS

swift - 为什么 addNotificationBlock 在空列表上崩溃?

macos - 不调用委托(delegate)函数 - NSURLConnection

swift - 在 Swift 中创建一个转到另一个类的按钮

swift - 左右移动节点而不捕捉触摸

swift - FloatingPoint 扩展 - 使用其他 FloatingPoint 类型初始化

ios - Swift3 webview isUserInteractionEnabled 不起作用

xcode - QLPreviewView 在设置 previewItem 时在运行时导致 EXC_BAD_ACCESS 错误

ios - 如何使 View Controller 以部分透明度呈现?

ios - 在 Swift 中,改编了 AVCaptureVideoDataOutputSampleBufferDelegate,但从未调用 captureOutput