UISearch NSpredicate过滤NSArray

时间:2014-05-08 20:36:13

标签: ios objective-c

我正在尝试使用UISearch进行过滤,当我过滤NSArray时会导致以下错误:无法使用字符串

进行子字符串操作

使用

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF beginswith[cd] %@", searchText];
    self.searchResults = [self.pnldArray filteredArrayUsingPredicate:predicate];

数组显示为

(
        (
        "Section 4 - H15, H19, H26, H42, H43 and H44",
        "Section 5 - H21, H25 and H34"
    ),
        (
        "Section 149(1) - H5487",
        "Section 149(1) - H5491"
    ),
        (
        "Section 146(1) - H5472",
        "Section 147(1) - H5477"
    ),

2 个答案:

答案 0 :(得分:0)

通过查看lhs(左手侧)和rhs(右手侧)类型,您应该能够直接从抛出的异常中看到哪些类型被比较。

例如,如果您的数组包含一个UIColor对象和一个值为" bar"的NSString,那么例外将是:

不能使用不是字符串的东西进行子字符串操作(lhs = UIDeviceRGBColorSpace 1 0 0 1 rhs = bar)

由于谓词beginswith需要NSString类型的对象,因此任何其他类型的对象都会导致谓词失败。

答案 1 :(得分:0)

可能想要:

NSPredicate*    predicate = [NSPredicate predicateWithFormat:@"ANY SELF beginswith[cd] %@", searchText];

我说可能是因为它并不是特别清楚你期望的结果。给定的谓词将返回一个字符串数组数组(与您开始时的格式相同),其中仅返回包含目标字符串的数组(完整)

相反,如果您只想要包含搜索文本的字符串以某些扁平数组或其他形式返回,那么您就可以获得更多工作。