使用nil required属性保存上下文时,Core Data自定义访问器崩溃

时间:2016-09-15 19:10:45

标签: ios swift core-data magicalrecord

在阅读了有关Swift中自定义访问者的this excellent article之后,我从NSDecimalNumber重构了以使用新的Decimal类型。我有一个相当复杂的模型,事情已经好几天了,但是我现在看到EXC_BAD_ACCESS崩溃,如果我保存托管对象上下文而必需(非可选)属性是nil,{{1}在我的情况下。在重构之前直接使用baseAmount时,保存对象会失败,但不会崩溃。

不确定这是否重要,但我正在使用魔法记录功能保存上下文:NSDecimalNumber

关于如何修改NSManagedObjectContext.mr_default().mr_saveToPersistentStoreAndWait()访问器以实现Core Data提供的相同失败保存行为以使其不崩溃的任何想法?

这是我的NSManagedObject子类的相关部分,后面是堆栈跟踪:

baseAmount

1 个答案:

答案 0 :(得分:2)

在文章中我提到"原始访问器总是可以为空的Objective-C引用类型"。这是一个不受isOptional设置影响的事实,因为您已经发现了这些崩溃。

因此,必须如下声明原始访问器:

@NSManaged private var primitiveBaseAmount: NSDecimalNumber?

有了这个,你已经将baseAmount访问者声明为Decimal(非可选),因此你的自定义get实现必须在遇到时做一些非崩溃的事情null原始值,如return primitiveBaseAmount?.decimalValue ?? 0