4

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

    }
     ];

更新:

这是概述问题的示例项目的链接。

4

0 回答 0