我目前正在开发一个严重依赖 CoreData 并不断保存信息的 iOS 应用程序。
在 MagicalRecord 的帮助下,我使用 saveInBackgroundWithBlock 函数设置了后台保存。
我遇到的问题是,即使我将 NSFetchRequest 设置为“setReturnsObjectsAsFaults:NO”,在此块中获取的任何内容都始终返回错误对象。
我通过使用“MR_defaultContext”从主线程获取运行了相同的测试,这些对象也作为故障返回。
不让这些对象作为故障对象返回的唯一方法是使用“MR_rootSavingContext”从存储中获取对象。
奇怪的是,我设置了“setReturnsObjectsAsFaults:NO”并且对象仍然作为故障对象返回。
我需要它们无故障的原因是我确切地知道需要更新哪些数据,并且在每个对象上触发故障都会对性能造成巨大影响,而批处理这些故障会更快。
关于我如何设置获取请求的一些示例代码如下所示:
[MagicalRecord saveInBackgroundWithBlock:^(NSManagedObjectContext *localContext) {
UserData *newUser = [UserData MR_findFirstByAttribute:@"index" withValue:[NSNumber numberWithInteger:currentUserIndex] inContext:localContext];
NSFetchRequest *documentsRequest = [DocumentData MR_requestAllWhere:@"user" isEqualTo:newUser inContext:localContext];
[documentsRequest setReturnsObjectsAsFaults:NO];
NSArray *fetchedDocuments = [localContext executeFetchRequest:documentsRequest error:nil];
// Fetched data is manipulated here, but the above fetchedDocuments are all faulted, and as a result really slow to update here
} completion:^{
NSLog(@"Finished saving documents");
}
];
更新: