MagicalRecord 总是出错 - 无法读取数据

Posted

技术标签:

【中文标题】MagicalRecord 总是出错 - 无法读取数据【英文标题】:MagicalRecord always faults - unable to read data 【发布时间】:2017-12-06 16:24:33 【问题描述】:

当我尝试访问从mr_findAll返回的记录时,无论我尝试什么,总是无法读取数据。

请理解我必须在这里编辑一堆信息,所以代码看起来像

var results: [Unit] = []

let predicate: NSPredicate? = NSPredicate(format: "abc == %@ AND def == %@", abc, def)

results = Unit.mr_findAll(with: predicate, in:NSManagedObjectContext.mr_default()) as! [Unit]

返回三个结果,这是我所期望的;如果我在控制台中检查它们,它们看起来像:

po结果

▿ 3 个元素

0 : app.Unit: 0x6080002959a0> (实体:Unit;id:0xd00000000004000a x-coredata://08DA3A42-AFDA-4280-A5B5-4E1267509CFC/Unit/p1> ;数据:故障) 1 : app.Unit: 0x608000295b30> (实体:Unit;id:0xd00000000008000a x-coredata://08DA3A42-AFDA-4280-A5B5-4E1267509CFC/Unit/p2> ;数据:故障) 2 : app.Unit: 0x608000295d10> (实体:Unit;id:0xd0000000000c000a x-coredata://08DA3A42-AFDA-4280-A5B5-4E1267509CFC/Unit/p3> ;数据:故障)

然后我尝试访问结果:

for result in results 
        let ghi = result.ghi
        let jkl = result.jkl

在第一次可能访问结果成员时,我得到一个 EXC_BAD_INSTRUCTION,在检查器中我看到 无法读取数据

我尝试了多种方法来“抵消”对结果的访问,因为我已经读到,一旦您访问错误记录的成员,核心数据就会获取它,但无济于事。

如果我使用获取请求,我可以规定

returnsObjectsAsFaults = false

我在 MagicalRecord 界面中看不到任何允许上述或类似内容的内容。

我真的在寻找

一种可以确保我不会出错的技术 或 绝对可以解决故障的技术。

非常感谢任何帮助。

【问题讨论】:

【参考方案1】:

使用 NSManagedObjectContext.mr_default() 不是线程安全的。最好使用本地上下文,例如:

var results: [Unit] = []
MagicalRecord.save(blockAndWait:  (localContext) in

    let predicate: NSPredicate? = NSPredicate(format: "abc == %@ AND def == %@", abc, def)
    results = Unit.mr_findAll(with: predicate, in:localContext) as! [Unit]
)

【讨论】:

以上是关于MagicalRecord 总是出错 - 无法读取数据的主要内容,如果未能解决你的问题,请参考以下文章

保存和重新访问后对象字段仍然出错 (MagicalRecord)

处理 MagicalRecord 中的 saveWithBlock 和关系时出错

MagicalRecord 并不总是保存更改

从视图中的表单读取文件输入时总是出错

MagicalRecord SQLite 文件为空

急!用U盘拷贝文件时出错,代码:0x80070570文件或目录损坏且无法读取。