UIManagedDocument 和 NSFetchedResultsController
Posted
技术标签:
【中文标题】UIManagedDocument 和 NSFetchedResultsController【英文标题】:UIManagedDocument and NSFetchedResultsController 【发布时间】:2012-01-31 14:55:05 【问题描述】:我在使用 UIManagedDocument 保存实体时遇到问题。我有一个 NSFetchedResultsController 其上下文设置为 UIManagedDocuments 上下文。我的控制器设置了部分。用户向 UIManagedDocuments 上下文添加一个条目,我使用以下方法保存上下文: [上下文保存:&错误]; 并且我的 NSFetchedResultsController 正确更新。
如果我离开具有 NSFetchedResultsController 的视图,然后返回到视图,在该视图中创建一个具有相同 UIManagedDocuments 上下文的新 NSFetchedResultsController,当我调用时会收到错误消息: [fetchedResultsController performFetch:&error];
错误提示:
CoreData:错误:(NSFetchedResultsController)在索引处获取的对象有一个乱序部分名称'。对象必须按部分名称排序'
获取失败。
如果我在返回视图之前等待一段时间,我不会收到错误消息。我知道保存操作是在子上下文中完成的,然后将更改推送到父上下文中,我认为这与问题有关。有人有解决办法吗?
【问题讨论】:
【参考方案1】:根据 UIManagedDocument 参考,您不应该通过 NSManagedObjectContext 保存。应通过适当的 UIManagedDocument API 进行保存。不幸的是,该文档并没有明确说明您应该使用什么。
如果您使用撤消管理器,该路径应该确保所有内容都被适当地标记为脏并保存。同样,使用显式调用
[document updateChangeCount:UIDocumentChangeDone];
应该提供类似的功能。但是,保存将被推迟,因为它是在单独的线程中完成的。
【讨论】:
非常感谢,我遇到了完全相同的问题,使用 [document.managedObjectContext save:] 是问题所在。删除保存,一切顺利。以上是关于UIManagedDocument 和 NSFetchedResultsController的主要内容,如果未能解决你的问题,请参考以下文章
覆盖UIManagedDocument中的managedObjectModel