由于文档有点参差不齐,我想知道是否有人可以阐明如何/何时准确使用 saveInBackgroundWithBlock。
每次启动后,我都会在后台运行一个批处理来更新 Core Data 中的一些值。但是,当我运行这段代码(简化)时:
[MagicalRecord saveInBackgroundWithBlock:^(NSManagedObjectContext *context) {
NSArray *all = [Event findAll];
for (Event *event in all) {
event.timestamp = [NSDate date];
}
}];
在保存上下文时,上下文永远不会有任何更改。但是,当我执行以下操作时:
[MagicalRecord saveInBackgroundWithBlock:^(NSManagedObjectContext *context) {
NSArray *all = [Event findAll];
for (Event *event in all) {
Event *tmpEvent = [event inContext:context];
tmpEvent.timeStamp = [NSDate date];
}
}];
一切都很好,变化出现了。我看到的唯一问题是,如果我使用 findAll,所有事件的数据都会出错:
(lldb) po event
(Event *) $1 = 0x07497c90 <Event: 0x7497c90> (entity: Event; id: 0x7490a50 <x-coredata://2DB960AE-FA52-42A7-9A5F-957199076FF7/Event/p1> ; data: <fault>)
(lldb) po tmpEvent
(Event *) $2 = 0x08574250 <Event: 0x8574250> (entity: Event; id: 0x7490a50 <x-coredata://2DB960AE-FA52-42A7-9A5F-957199076FF7/Event/p1> ; data: {
name = Test;
number = 0;
timeStamp = "2012-10-15 16:18:39 +0000";
})
如果我使用 saveInBackground 不正确,我总是可以将 NSOperationQueue 块操作与 MagicalRecord 的上下文线程结合使用,但我希望能够使用这一点语法糖来使我的代码更简洁一些。