core-data - 检查零核心数据属性导致 EXC_BAD_ACCESS

标签 core-data swift

我有一个简单的 NSManagedObject 子类:

@objc class MyModel: NSManagedObject {
    @NSManaged var myProperty: String
}

但是,下面的代码:

var model = NSEntityDescription.insertNewObjectForEntityForName("MyModel", inManagedObjectContext: managedObjectContext) as MyModel

assert(model != nil) // passes

if model.myProperty != nil { //crashes
    println("not nil")
}

if model.myProperty != nilEXC_BAD_ACCESS 处崩溃。为什么会这样?这仅在 Beta 5 中才开始发生,并在 Beta 4 中正常工作。

上面的类是使用 Xcode 自动生成的,所以他们没有在属性的末尾添加 ?。但是,手动添加 ? 到属性的末尾确实可以解决问题(@NSManaged var myProperty: String?)。

我的问题是,如果 Xcode 在模式中被标记为可选,为什么 Xcode 不自动添加问号,为什么这在以前的测试版中不是问题?

最佳答案

要让它工作,你应该做两件事:

1) 在 NSManagedObject 子类中添加 ?使属性可选

@objc class MyModel: NSManagedObject {
    @NSManaged var myProperty: String? // <-- add ? here
}

2) 按照上一个答案中的建议在您的实现中

if let aProperty = model.myProperty? {
    // do something with aProperty
}

请注意,如果您忘记添加 ?在 NSManagedObject 子类中我们有编译错误。

关于core-data - 检查零核心数据属性导致 EXC_BAD_ACCESS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25141642/

相关文章:

ios - ivar 有两种不同的行为方式,但用法相同

linux - 如何在 Kitura 中测试 CORS?

swift - 如何通过 Swift 3 中的协议(protocol)从类公开 init() 的接口(interface)

ios - NSTimer scheduledTimerWithTimeInterval - 不调用函数

ios - 使用 contains 检查 NSManagedObject Array 是否具有特定键的值

arrays - 如何按属性值(日期)对包含 NSManagedObject 子类实例的快速数组进行排序

swift - .propertiestofetch 在 Swift 中获取 CoreData 实体中的属性数组

swift - 从一对多关系核心数据中保存、删除和获取数据

ios - SwiftUI:创建 CoreData 对象后无法关闭工作表

ios - UITableView 单元格 detailTextLabel 文本对齐不起作用