我有一个UIManagedDocument
,其中包含一些数据,这些数据会使用NSFetchedResultsController
在列表中显示。数据会在后台定期更新,并将更改放入UIManagedDocument.managedObjectContext
(使用performBlock 。
当我显示来自文档主要上下文的数据时,所有工作均按预期进行。但是,一旦我在主上下文(child.parentContext = document.managedObjectContext
)的子上下文中显示列表,我就看不到任何对象,并且控制台上会显示以下错误:
foo[17895:15203] CoreData: error: (NSFetchedResultsController)
The fetched object at index 5 has an out of order section name 'E.
Objects must be sorted by section name'
sectionNameKeyPath
上设置了NSFetchedResultsController
且仅具有子上下文时。NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName"Contact"];
fetchRequest.sortDescriptors = [Contact userDefinedSortDescriptors];
fetchRequest.predicate = [NSPredicate predicateWithFormat"hidden == nil || hidden == NO"];
NSFetchedResultsController *fetchedResultsController =
[[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
managedObjectContext:_managedObjectContext
sectionNameKeyPath:[Contact userDefinedSectionNameKeyPath]
cacheName"ContactList"];
[Contact userDefinedSortDescriptors]
和[Contact userDefinedSectionNameKeyPath]
在运行时解析。排序描述符包含sectionNameKeyPath作为第一个条目。 nil
或其他有趣的东西都不能。UIManagedDocument.managedObjectContext
。context = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
context.parentContext = repository.managedObjectContext;
[context performBlock:^{ /* updates */ }];
[context performBlock:^{ [context save:NULL]; }];
-performBlock:
正确地包围了。所有其他访问均从主线程完成。NSFetchRequest
进行一些设置时,我发现设置fetchRequest.includesPendingChanges = NO
时问题消失了。但这不是一个可行的解决方案,因为在UIManagedDocument将更改保存到后台之前,用户现在看不到任何更新。
这里有几个危险信号给我。首先,这个...
数据会在后台定期更新,并将更改保存到UIManagedDocument.managedObjectContext中(使用performBlock 。
UIManagedDocuments实现了自动保存,并且唯一应该直接调用save方法的时间是在初始创建时。所有其他“保存”都应通过自动保存界面来完成。基本上,这就是
[document updateChangeCount:UIDocumentChangeDone];
关于ios - NSFetchedResultsController无法在子上下文中获取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10188319/
欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) | Powered by Discuz! X3.4 |