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

标签 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 results

▿ 3 elements

  • 0 : app.Unit: 0x6080002959a0> (entity: Unit; id: 0xd00000000004000a x-coredata://08DA3A42-AFDA-4280-A5B5-4E1267509CFC/Unit/p1> ; data: fault)
  • 1 : app.Unit: 0x608000295b30> (entity: Unit; id: 0xd00000000008000a x-coredata://08DA3A42-AFDA-4280-A5B5-4E1267509CFC/Unit/p2> ; data: fault)
  • 2 : app.Unit: 0x608000295d10> (entity: Unit; id: 0xd0000000000c000a x-coredata://08DA3A42-AFDA-4280-A5B5-4E1267509CFC/Unit/p3> ; data: fault)

然后我尝试访问结果:

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

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

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

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

returnsObjectsAsFaults = false

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

我正在寻找

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

非常感谢任何帮助。

最佳答案

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

关于ios - MagicalRecord总是出错——无法读取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47678980/

相关文章:

ios - 代码签名错误 : a valid provisioning profile matching the application's Identifier 'program' could not be found

ios - 魔法记录 - 丢失我的实体信息

ios - 如何从 UIView 的某些部分删除边框?

ios - RestKit 并作为 NSManagedObject 保存到 CoreData

ios - TableView分隔符消失

Swift 4 + Alamofire 可解码 Json URL 格式

ios - CoreData在启动时检测数据库不一致

ios - 魔法记录: Calculate data with calculations

iphone - 从 UITableViewCell 到模态视图 Controller 的动画

swift - 错误 :The use of xcframeworks is not supported in the legacy build system