【问题标题】:NSPredicate with CAST function in FetchResultControllerNSPredicate 与 FetchResult 控制器中的 CAST 函数
【发布时间】:2015-09-24 15:19:53
【问题描述】:

我最近阅读了有关 NSPredicate 中的转换工作原理的文章,我正在尝试在我的FetchResultController 中使用一个。结果出乎意料:

*** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“未实现的 SQL 生成 对于谓词:(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]);
}

【问题讨论】:

    标签: ios objective-c casting nspredicate nsfetchedresultscontroller


    【解决方案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];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-01
      • 2018-06-18
      • 1970-01-01
      • 2011-04-03
      相关资源
      最近更新 更多