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.stringValue
或 orderNumber.description
而不是 CAST。有效。
NSPredicate *searchPredicate = [NSPredicate predicateWithFormat:@"localOrderId contains[cd] '%1$@' "
"OR customerName contains[cd] '%1$@' "
"OR orderNumber.stringValue contains[cd] '%1$@') ", keySearch];
我最近读到了 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.stringValue
或 orderNumber.description
而不是 CAST。有效。
NSPredicate *searchPredicate = [NSPredicate predicateWithFormat:@"localOrderId contains[cd] '%1$@' "
"OR customerName contains[cd] '%1$@' "
"OR orderNumber.stringValue contains[cd] '%1$@') ", keySearch];