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 ,他们报告了类似的行为,但我还没有找到解决问题的方法.
我也遇到了这个问题.根本原因是由NSPredicate格式字符串中的属性值设置错误类型引起的.
对于这个问题,可能是" state" 的属性具有数字类型,如" Integer 32".但是上面的代码将NSString传递给它(@"1"),只需将其更改为NSNumber(@1),就可以解决问题.
Matthew Weiss最后通过使用获取请求模板来解决问题.我认为state在模板中检查" "没有类型问题.并且只有fromDate和toDate由subs传递.
| 归档时间: |
|
| 查看次数: |
1133 次 |
| 最近记录: |