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

时间:2017-12-06 16:24:34

标签: ios swift magicalrecord

无论我尝试访问从 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> (实体:单位; id:0xd00000000004000a x-coredata:// 08DA3A42-AFDA-4280-A5B5-4E1267509CFC / Unit / p1&gt ;; data:fault)
  •   
  • 1:app.Unit:0x608000295b30> (实体:单位; id:0xd00000000008000a x-coredata:// 08DA3A42-AFDA-4280-A5B5-4E1267509CFC / Unit / p2&gt ;; data:fault)
  •   
  • 2:app.Unit:0x608000295d10> (实体:单位; id:0xd0000000000c000a x-coredata:// 08DA3A42-AFDA-4280-A5B5-4E1267509CFC / Unit / p3&gt ;; data:fault)
  •   

然后我尝试访问结果:

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

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

我尝试了很多方法来“抵消”对结果的访问,因为我读过这一点,一旦你访问了一个故障记录核心数据的成员就会获取它但是无济于事。

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

returnsObjectsAsFaults = false

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

我正在寻找

  • 一种确保我不会出错的技术 OR
  • 一种绝对可以解决问题的技术。

任何帮助都非常感激。

1 个答案:

答案 0 :(得分:2)

使用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]
})