我最近读过关于如何在NSPredicate中进行投射的工作,而我正试图在我的FetchResultController
中使用一个。结果出乎意料:
***由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'未实现的SQL生成 for predicate :( CAST(orderNumber,“NSString”)CONTAINS [cd]“%1 $ @”) (糟糕的RHS)'
orderNumber
是NSNumber。它包含从服务器获取的自动生成的id。我不确定我是否可以在FetchResultController
中使用CAST,因为SO中的一些答案表示它能够在正常的NSArray中使用CAST。
这是我的代码:
NSPredicate *searchPredicate = [NSPredicate predicateWithFormat:@"localOrderId contains[cd] '%1$@' "
"OR customerName contains[cd] '%1$@' "
"OR (CAST(orderNumber, 'NSString') contains[cd] '%1$@') ", keySearch];
[_fetchedResultsController.fetchRequest setPredicate:searchPredicate];
NSError *error = nil;
if (![[self fetchedResultsController] performFetch:&error]) { // << Die here
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
}
答案 0 :(得分:1)
使用orderNumber.stringValue
或orderNumber.description
代替CAST。可以。
NSPredicate *searchPredicate = [NSPredicate predicateWithFormat:@"localOrderId contains[cd] '%1$@' "
"OR customerName contains[cd] '%1$@' "
"OR orderNumber.stringValue contains[cd] '%1$@') ", keySearch];