MagicalRecord 总是出错——无法读取数据
MagicalRecord always faults - unable to read data
当我尝试访问从 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,在检查器中我看到 无法读取数据。
我尝试了多种'offsetting'访问结果的方法,因为我已经读到,只要您访问错误记录的成员,核心数据就会获取它,但无济于事。
如果我使用获取请求,我可以规定
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]
})
当我尝试访问从 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,在检查器中我看到 无法读取数据。
我尝试了多种'offsetting'访问结果的方法,因为我已经读到,只要您访问错误记录的成员,核心数据就会获取它,但无济于事。
如果我使用获取请求,我可以规定
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]
})