Core data NSPredicate使更新编辑返回NSFetchedResultsChangeDelete而不是NSFetchedResultsChangeUpdate

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

从CoreDataBook示例开始,我以标准方式在
-(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];