【发布时间】:2011-05-26 20:18:40
【问题描述】:
这个让我很困惑:
我有一个核心数据集,我使用以下代码搜索/过滤:
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 =='活动'))和 ((LeadID 包含 [cd] 'i')或 (帐号包含 [cd] 'i')或 (任何contactItems.FirstName 包含[cd] 'i')OR (ANY contactItems.LastName 包含[cd] 'i') 或(任何 addressItems.Address1 包含[cd] 'i')OR (ANY addressItems.City 包含[cd] 'i'))
我的捕获允许我不会崩溃并且只返回 0 个结果,但这不是最佳的。有没有人见过这个?
我唯一的线索是,它似乎发生在我修改(并保存)核心数据中的记录之后(同样只是有时)。
【问题讨论】:
标签: objective-c core-data nspredicate nsfetchrequest