【问题标题】:NSPredicate array contains question [duplicate]NSPredicate 数组包含问题 [重复]
【发布时间】:2011-11-04 16:05:24
【问题描述】:

可能重复:
Searching/Filtering a custom class array with a NSPredicate

我有一个包含自定义类对象的数组,我想根据其中一个类属性是否包含自定义字符串来过滤数组。我有一个方法,它传递了我想要搜索的属性(列)和它将搜索的字符串(searchString)。这是我的代码:

NSPredicate *query = [NSPredicate predicateWithFormat:@"%@ contains %@", column,      searchString];
NSMutableArray *temp = [displayProviders mutableCopy];
[displayProviders release];
displayProviders = [[temp filteredArrayUsingPredicate:query] mutableCopy];
[temp release];

由于某种原因,这总是返回一个空数组。四列中的三列是整数或双精度数,因此如果需要,我可以添加一个 if 语句将 searchString 转换为数字。但是,即使在搜索字符串属性并且应该有一些包含字符串 searchString 的行时,也会返回一个空数组。

我是否错误地使用了“包含”?

【问题讨论】:

    标签: ios cocoa-touch search nspredicate contains


    【解决方案1】:

    对于在谓词中搜索字符串,我发现将单引号包裹在我要搜索的内容上效果最好,并使用contains[cd] 而不是contains,如下所示([cd] 位指定大小写和变音符号不敏感搜索):

    NSPredicate *query = [NSPredicate predicateWithFormat:@"%@ contains[cd] '%@'", column, searchString];
    

    对于使用整数搜索列,使用双等号也可以正常工作:

    NSPredicate *query = [NSPredicate predicateWithFormat:@"%@ == %@", column, searchString];
    

    【讨论】:

      【解决方案2】:

      我认为你的谓词应该是[NSPredicate predicateWithFormat: @"column contains %@", searchString]

      现在的方式是,您的谓词变为""column" contains "string"",它的计算结果始终为假。

      根据您的情况,使用contains[cd] 也可能是个好主意。

      【讨论】:

        猜你喜欢
        • 2011-08-13
        • 2011-06-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-21
        • 2021-12-02
        • 1970-01-01
        相关资源
        最近更新 更多