这个让我莫名其妙:
我有一个核心数据集,我使用以下代码搜索/过滤:
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:[NSEntityDescription entityForName:@"Lead" inManagedObjectContext:moc]];
NSString *predicateString = [NSString stringWithFormat:@"("
"(isLocalVersion == %@) AND (LeadStatusID =='Active')"
") AND ("
"(LeadID contains[cd] '%@')"
"OR (AccountNumber contains[cd] '%@')"
"OR (ANY contactItems.FirstName contains[cd] '%@')"
"OR (ANY contactItems.LastName contains[cd] '%@')"
"OR (ANY addressItems.Address1 contains[cd] '%@')"
"OR (ANY addressItems.City contains[cd] '%@')"
")", [NSNumber numberWithBool:YES], sTerm, sTerm, sTerm, sTerm, sTerm, sTerm];
NSPredicate *predicate = [NSPredicate predicateWithFormat:predicateString];
[fetchRequest setPredicate:predicate];
NSError *error = nil;
NSArray *leads = nil;
@try {
leads = [moc executeFetchRequest:fetchRequest error:&error];
}
@catch (NSException *exception) {
LogSevere(@"Error Executing Fetch Request: %@", exception);
leads = [NSArray array];
}
@finally {
[fetchRequest release];
}
sTerm 只是一个NSString
.
这在 95% 的时间里都有效,但是每隔一段时间它就会捕获一个NSInvalidArgumentException: Can't use in/contains operator with collection 10076173 (not a collection).
谓词字符串格式如下:
((isLocalVersion == 1) AND (LeadStatusID =='Active')) AND ((LeadID contains[cd] 'i')OR (AccountNumber contains[cd] 'i')OR (ANY contactItems.FirstName contains[cd] 'i')OR (ANY contactItems.LastName contains[cd] 'i')OR (ANY addressItems.Address1 contains[cd] 'i')OR (ANY addressItems.City contains[cd] 'i'))
我的捕获让我不会崩溃,只返回 0 个结果,但这不是最佳的。有没有人见过这个?
我唯一的线索是,它似乎发生在我修改(并保存)核心数据中的记录之后(再次只是有时)。