【发布时间】:2017-05-26 22:17:59
【问题描述】:
在我的 NSManagedObjects 中,我有一些属性 A) 我不希望或不需要存储和 B) 只计算一次,并且只在需要它们时才计算,这样计算就不会重复(因为它们有点贵)。
这是我正在谈论的代码:
public class Sample: NSManagedObject {
@NSManaged public var id: NSNumber
@NSManaged public var anotherProperty: String?
var orderedCustomObjects : Array<CustomObject>?
func getOrderedCustomObjects() -> [CustomObject] {
// application crashes on this line.
if (orderedCustomObjects == nil) {
// compute the custom object array here.
}
return orderedCustomObjects!
}
}
public class CustomObject {
var price : String?
var quantity : String?
}
我在看似无害的线路上遇到以下崩溃,该线路在计算之前检查属性是否为 nil:
崩溃:com.apple.main-thread EXC_BAD_ACCESS KERN_INVALID_ADDRESS 0x0000000000000048
对于我为什么会因此而崩溃的任何帮助,我们将不胜感激。
【问题讨论】:
-
EXC_BAD_ACCESSS 表示您正在访问的对象的内存已被释放。所以问题不在于 nil 检查,问题在于您正在访问其内存已被释放的对象。
-
你是在哪里删除这个对象吗?请记住 Sample 是一个 NSManagedObject 子类。在 1 个 NSManagedObjectContext 中,只能有 1 个对象代表您的实体中的记录。如果您有 2 个,它们将是同一个实例,因此如果您删除 1 个并通过另一个访问,您可能会遇到麻烦。
标签: ios swift core-data nsmanagedobject