NSPredicate导致更新编辑返回NSFetchedResultsChangeDelete而不是NSFetchedResultsChangeUpdate

Mat*_*iss 4 predicate core-data

- (NSFetchedResultsController *)fetchedResultsController从CoreDataBook示例开始以标准方式使用谓词.

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"state=%@ && date >= %@ && date < %@", @"1",fromDate,toDate];
    [fetchRequest setPredicate:predicate];
Run Code Online (Sandbox Code Playgroud)

这工作正常但是在编辑项目时,它返回NSFetchedResultsChangeDelete而不是Update.当主视图返回时,它缺少该项.如果我重新启动模拟器,则不会保存删除并显示正确的编辑结果,谓词正常工作.

case NSFetchedResultsChangeDelete:
 [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
 break;
Run Code Online (Sandbox Code Playgroud)

我可以通过仅注释两个谓词行来确认行为,然后全部工作,因为它应该在编辑和调用NSFetchedResultsChangeUpdate而不是NSFetchedResultsChangeDelete后正确返回完整集.

我已经阅读了http://matteocaldari.it/2009/11/multiple-contexts-controllers-delegates-and-coredata-bug ,他们报告了类似的行为,但我还没有找到解决问题的方法.

fla*_*lib 6

我也遇到了这个问题.根本原因是由NSPredicate格式字符串中的属性值设置错误类型引起的.

对于这个问题,可能是" state" 的属性具有数字类型,如" Integer 32".但是上面的代码将NSString传递给它(@"1"),只需将其更改为NSNumber(@1),就可以解决问题.

Matthew Weiss最后通过使用获取请求模板来解决问题.我认为state在模板中检查" "没有类型问题.并且只有fromDate和toDate由subs传递.