3

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

首先 - 我正在使用MagicalRecord核心数据。第二 - MyUICollectionView填充有NSFetchedResultsController.

对于... NSPredicate_NSFetchedResultsController

NSPredicate *eventPredicate = [NSPredicate predicateWithFormat:@"event = %@", self.event];
NSPredicate *deletedPredicate = [NSPredicate predicateWithFormat:@"deleted == NO"];

NSPredicate *compoundPredicate = [NSCompoundPredicate andPredicateWithSubpredicates:@[eventPredicate, deletedPredicate]];

当我使用 Magical Record 将新项目添加到 CoreData 时saveWithBlockcollectionView会正确更新并将更改动画化。

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

[MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) {
    Photo *photo = [[self photoAtIndexPath:[self.collectionView indexPathForCell:cell]] inContext:localContext];
    photo.deleted = @YES;
}];

然后NSFetchedResultsController委托方法触发,除非它以更改类型触发NSFetchedResultsChangeUpdate。但这不是它应该的样子。应该NSFetchedResultsChangeDelete像更改已删除的值一样将其从获取请求中删除。

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

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

有任何想法吗?

4

1 回答 1

4

您不能将属性称为“已删除”,因为这isDeletedNSManagedObject.

请参阅 核心数据 NSPredicate "deleted == NO" 未按预期工作NSPredicate 在首次启动时未执行,以 了解如果属性被称为 "deleted" 时会发生 "奇怪的事情" 的不同示例。

于 2013-04-29T16:55:58.187 回答