Core data NSPredicate使更新编辑返回NSFetchedResultsChangeDelete而不是NSFetchedResultsChangeUpdate
从CoreDataBook示例开始,我以标准方式在Core data NSPredicate使更新编辑返回NSFetchedResultsChangeDelete而不是NSFetchedResultsChangeUpdate,core-data,predicate,Core Data,Predicate,从CoreDataBook示例开始,我以标准方式在-(NSFetchedResultsController*)fetchedResultsController中使用谓词 NSPredicate *predicate = [NSPredicate predicateWithFormat:@"state=%@ && date >= %@ && date < %@", @"1",fromDate,toDate]; [fetchRequest setP
-(NSFetchedResultsController*)fetchedResultsController
中使用谓词
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"state=%@ && date >= %@ && date < %@", @"1",fromDate,toDate];
[fetchRequest setPredicate:predicate];
我可以通过只注释掉两个谓词行来确认该行为,然后在编辑并调用NSFetchedResultsChangeUpdate而不是NSFetchedResultsChangeDelete之后,所有操作都会正确返回完整的集合
我读过
谁报告了类似的行为,但我没有找到解决问题的方法。您是否使用了多个
NSManagedObjectContext
?您链接到的帖子使用了多个NSManagedObjectContext
实例,这是他的问题的根源。这不是NSFetchedResultsController中的bug,而是他对其工作原理的误解
关于你的问题,;第一个问题:案例
在您展示的案例之前,您是否有休息时间
编辑代码是什么样子的?您显示一个谓词,但不显示正在编辑您声明的对象的代码,该对象导致触发
NSFetchedResultsChangeDelete
。在我的帖子中,我正在处理nsfetchedresultscoontroller
(请参阅)中的一个已知错误,它在两个不同的托管对象上下文中对两个对象进行指针比较,相反,要评估objectID,所以我认为这不是您的问题
如果您在
NSPredicate
中指定的时间间隔之外修改对象的日期,或者进行任何其他修改,您的对象是否会被视为已删除?很抱歉,已经过了一段时间,我很快就会发布该产品。解决方法是在获取的对象中创建存储过程并使用
NSFetchRequest *fetch = [model fetchRequestFromTemplateWithName:@"myTemplate1" substitutionVariables:subs];
这消除了对FetchedResultsController使用谓词的情况
当我想使用谓词时,我只需确保我使用的是本地managedObjectContext,并将数组本身传递给其他地方<代码>NSArray*数组=[moc executeFetchRequest:fetchRequest错误:&错误];返回数组代码>
这是一个更安全的赌注,允许您对同一数据进行多次查看 我也遇到了这个问题。根本原因是将NSPredicate格式字符串中的属性值设置为错误的类型
对于这个问题,“state
”的属性可能有一个数字类型,比如“整数32
”。但是上面的代码向它传递了一个NSString(@“1”
),只需将它更改为一个NSNumber(@1
),就可以解决这个问题
Matthew Weiss最终通过使用获取请求模板修复了该问题。我认为“状态
”是在模板中检查的,它没有类型问题。只有fromDate和toDate通过SUB传递。非常感谢。这救了我一天!:)这节省了我的时间,谢谢,我的代码在iOS中运行得很好。我也遇到了同样的问题,但使用Swift 4和id(UUID),并使用argumentArray:[“”]将它们与字符串进行了比较。谢谢
NSFetchRequest *fetch = [model fetchRequestFromTemplateWithName:@"myTemplate1" substitutionVariables:subs];