在阅读了有关Swift中自定义访问者的this excellent article之后,我从NSDecimalNumber
重构了以使用新的Decimal
类型。我有一个相当复杂的模型,事情已经好几天了,但是我现在看到EXC_BAD_ACCESS
崩溃,如果我保存托管对象上下文而必需(非可选)属性是nil,{{1}在我的情况下。在重构之前直接使用baseAmount
时,保存对象会失败,但不会崩溃。
不确定这是否重要,但我正在使用魔法记录功能保存上下文:NSDecimalNumber
关于如何修改NSManagedObjectContext.mr_default().mr_saveToPersistentStoreAndWait()
访问器以实现Core Data提供的相同失败保存行为以使其不崩溃的任何想法?
这是我的NSManagedObject子类的相关部分,后面是堆栈跟踪:
baseAmount
答案 0 :(得分:2)
在文章中我提到"原始访问器总是可以为空的Objective-C引用类型"。这是一个不受isOptional设置影响的事实,因为您已经发现了这些崩溃。
因此,必须如下声明原始访问器:
@NSManaged private var primitiveBaseAmount: NSDecimalNumber?
有了这个,你已经将baseAmount访问者声明为Decimal
(非可选),因此你的自定义get
实现必须在遇到时做一些非崩溃的事情null原始值,如return primitiveBaseAmount?.decimalValue ?? 0
。