在FetchResultController

时间:2015-07-07 08:27:10

标签: ios objective-c casting nspredicate nsfetchedresultscontroller

我最近读过关于如何在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]);
}

1 个答案:

答案 0 :(得分:1)

使用orderNumber.stringValueorderNumber.description代替CAST。可以。

NSPredicate *searchPredicate = [NSPredicate predicateWithFormat:@"localOrderId contains[cd] '%1$@' "
                                        "OR customerName contains[cd] '%1$@' "
                                        "OR orderNumber.stringValue contains[cd] '%1$@') ", keySearch];