FetchResult 控制器中带有 CAST 函数的 NSPredicate

NSPredicate with CAST function in FetchResultController

我最近读到了 NSPredicate 中的转换是如何工作的,我正试图在我的 FetchResultController 中使用它。结果太出乎意料了:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'unimplemented SQL generation for predicate : (CAST(orderNumber, "NSString") CONTAINS[cd] "%1$@") (bad 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]);
}

使用 orderNumber.stringValueorderNumber.description 而不是 CAST。有效。

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