【发布时间】:2013-04-23 09:23:13
【问题描述】:
请在盲目投票为重复之前查看 cmets。这不是重复的问题。
首先 - 我将 MagicalRecord 用于核心数据。
第二 - 我的UICollectionView 填充了NSFetchedResultsController。
NSFetchedResultsController 的 NSPredicate 是...
NSPredicate *eventPredicate = [NSPredicate predicateWithFormat:@"event = %@", self.event];
NSPredicate *deletedPredicate = [NSPredicate predicateWithFormat:@"deleted == NO"];
NSPredicate *compoundPredicate = [NSCompoundPredicate andPredicateWithSubpredicates:@[eventPredicate, deletedPredicate]];
当我使用 Magical Record 的 saveWithBlock 向 CoreData 添加新项目时,collectionView 会正确更新并将更改动画化到视图中。
问题是当我把deleted的值改成@YES...
[MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) {
Photo *photo = [[self photoAtIndexPath:[self.collectionView indexPathForCell:cell]] inContext:localContext];
photo.deleted = @YES;
}];
然后NSFetchedResultsController 委托方法触发,除非它使用更改类型NSFetchedResultsChangeUpdate 触发。但这不是它应该的样子。它应该是NSFetchedResultsChangeDelete,因为更改deleted 的值应该将其从获取请求中删除。
我不想只删除对象,因为我需要使用已删除的 ID 更新服务器。
此外,如果我随后弹出视图并再次将其推回,则照片消失了,因此我知道它正在正确更新它,并且我知道它正在从获取请求中删除它。
有什么想法吗?
【问题讨论】:
-
您不应该将属性称为“已删除”:例如参见stackoverflow.com/questions/16000242/… 或stackoverflow.com/questions/16178847/…。
-
非常感谢。那已经解决了。不过,我不同意“类似问题”。尽管它是相同的修复程序,但它是完全不同的“症状”。我没有办法搜索那个问题。
-
不客气。 - 我提供了这些链接,因为它们都表明如果您将属性称为“已删除”,则会发生“奇怪的事情”。我无意批评您的搜索努力! - 我不确定这是否是一个“重复的问题”:这是一个不同的问题,但相同的潜在问题,因此我投票决定以重复的形式结束。
-
在 meta.stackoverflow.com 上阅读 Proper Handling for Different-Question-Same-Answer 后,我现在给出了答案(我不能撤销最后的投票:-)
-
非常感谢 :) 接受了答案。
标签: ios core-data nsfetchedresultscontroller uicollectionview magicalrecord