创建一个'beginwith'NSPredicate

时间:2014-12-24 23:05:19

标签: objective-c nsarray nspredicate

我正在尝试创建一个搜索数组的NSPredicate,然后检查该数组中的任何对象是否以其他字符串开头。这是我的代码。它给了我一个崩溃,显然有些不对劲。

array = [[NSArray alloc] initWithObjects:@"Hello", @"What", @"Maybe", nil];

NSString *string = @"H";

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%@ BEGINSWITH %@", string, array];

NSArray *filteredArray = [array filteredArrayUsingPredicate:predicate];
NSLog(@"%@", filteredArray);

以下是崩溃错误:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Can't do a substring operation with something that isn't a string (lhs = H rhs = (
    Hello,
    What,
    Maybe
))'

然后在错误中给出了一堆数字,如果你愿意的话,我可以发帖,只是让我知道。

1 个答案:

答案 0 :(得分:3)

错误告诉您问题究竟是什么。看看错误。然后看看你的代码:

[NSPredicate predicateWithFormat:@"%@ BEGINSWITH %@", string, array]

字符串如何以数组开头?你的谓词是胡说八道。

因此,这是一个难点 - 您不必费心阅读错误消息。另一个困难的来源是你不必费心阅读文档。您还没有停下来了解NSPredicate格式究竟是什么。文档在这里:

https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/Predicates/Articles/pSyntax.html

我认为在你的情况下你想说的话肯定是更明智的,比如:

[NSPredicate predicateWithFormat:@"SELF BEGINSWITH %@", string]

尝试一下,看看它是否得到了你期望的结果。