NSFetchedResultsController使用错误的更新类型进行更新

时间:2013-04-29 16:07:39

标签: ios core-data nsfetchedresultscontroller uicollectionview magicalrecord

请在盲目投票之前查看评论。这不是一个重复的问题。

首先 - 我正在使用MagicalRecord核心数据。 其次 - 我的UICollectionView填充了NSFetchedResultsController

NSPredicate的{​​{1}}是......

NSFetchedResultsController

当我使用Magical Record的NSPredicate *eventPredicate = [NSPredicate predicateWithFormat:@"event = %@", self.event]; NSPredicate *deletedPredicate = [NSPredicate predicateWithFormat:@"deleted == NO"]; NSPredicate *compoundPredicate = [NSCompoundPredicate andPredicateWithSubpredicates:@[eventPredicate, deletedPredicate]]; saveWithBlock正确更新向CoreData添加新项目时,会将更改动画化为视图。

问题是当我将删除的值更改为@YES ...

collectionView

然后[MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) { Photo *photo = [[self photoAtIndexPath:[self.collectionView indexPathForCell:cell]] inContext:localContext]; photo.deleted = @YES; }]; 委托方法触发,除非它使用更改类型NSFetchedResultsController触发。但这不应该是它应该是的。它应为NSFetchedResultsChangeUpdate,因为更改已删除的值应将其从获取请求中删除。

我不想删除该对象,因为我需要使用已删除的ID更新服务器。

此外,如果我然后弹出视图并再次将其推回,则照片消失,所以我知道它正在正确更新它,我知道它正在从获取请求中删除它。

有什么想法吗?

1 个答案:

答案 0 :(得分:4)

您不得将某个属性称为“已删除”,因为这与isDeleted的{​​{1}}方法相冲突。

参见Core Data NSPredicate "deleted == NO" does not work as expectedNSPredicate does not get executed on first launch 对于不同的例子,如果属性被称为“已删除”,则会发生“奇怪的事情”。