我使用NSFetchedResultsController
和UITableView
,它显示该文件夹中每个项目的文件夹和关联的未读计数列表。我想根据同步/刷新期间的未读计数(在使用NSManagedObjectContextDidSaveNotification
的后台线程上)从tableView中插入/删除具有动画的文件夹。没有未读邮件文件夹应该淡出,并与新的未读项目现有的文件夹应该褪色。在NSFetchedResultsController中更新/插入现有对象
目前使用controller:didChangeObject:atIndexPath:forChangeType:newIndexPath:
方法不这样做,除非的tableView完全重新加载,或应用程序被重新启动,这是不理想。
是NSFetchedResultsController
不是这样做的吗?我最初的想法是创建一个单独的核心数据实体,它只保存带有未读项目的文件夹,并添加/删除文件夹,但看起来似乎很麻烦。
我NSPredicate
看起来像:
ANY items.unread == 1
更新: 以上NSPredicate正常工作,并抓住,我希望它的对象。我的问题是,如果应用程序启动并且FolderX有0个未读项目,它不会出现。如果我然后刷新(出去并在后台线程中解析JSON文件)并且FolderX现在有25个未读项目,它将自动淡入而不是或者触发NSFetchedResultsChangeInsert
,并且由于它不包含在第一位,它也不会触发NSFetchedResultsChangeUpdate
,这就是为什么我认为解决方案是创建一个单独的实体,它只保存带有未读项目的文件夹,并在同步期间添加/删除文件夹。
我只是觉得我失去了一些痛苦明显的东西。
更新2: 我已经简化,就像我可以通过删除自己的应用程序的影响问题,我能复制它在Xcode默认核心数据模板。
新问题: 有一个名为“Event”的实体没有关系,有两个属性“Date”和“unreadCount”。我已经NSFetchedResultsController成立了,看起来像一个NSPredicate:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"unreadCount < 10"];
每次添加一个新的对象,它与15的unreadCount,那么现有的所有对象都通过1.本递减所建立的完成单独ManagedObjectContext(复制后台处理,但全部在主线程上完成)。
我已经实现了controllerWillChangeContent和相关方法,并且我期望发生的事情是,在现有对象(unreadCount为15)递减5次(现在为10)之后,它应该插入到tableView中,因为它现在匹配谓词。这完全没有发生,除非应用程序重新启动,否则该对象完全不会显示。
我附加了一个示例项目,只需运行它并单击添加按钮几次(不会发生任何事情)。重新启动应用程序,如果您再次点击添加按钮多次,这些对象将自己删除,但新对象不会被添加,您现在将在tableView中看到一些对象。
如果NSFetchedResultsController不是解决此问题的方法,那么什么是?
范例项目:http://dl.dropbox.com/u/521075/BGUpdating.zip
你对这个问题的解决方案是什么?因为我有一个类似的问题:http://stackoverflow.com/questions/12776371/gmgridview-with-nsfetchedresultscontroller-data-not-updating-reloading – acecapades 2012-10-08 07:02:22