MagicalRecord saveInBackgroundWithBlock fetch返回故障对象

时间:2012-07-15 03:40:05

标签: objective-c ios core-data nsmanagedobjectcontext magicalrecord

我目前正在开发一个严重依赖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");

    }
     ];

更新

Here is a link to a sample project outlining the problem.

0 个答案:

没有答案