我正在尝试创建一个搜索数组的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
))'
然后在错误中给出了一堆数字,如果你愿意的话,我可以发帖,只是让我知道。
答案 0 :(得分:3)
错误告诉您问题究竟是什么。看看错误。然后看看你的代码:
[NSPredicate predicateWithFormat:@"%@ BEGINSWITH %@", string, array]
字符串如何以数组开头?你的谓词是胡说八道。
因此,这是一个难点 - 您不必费心阅读错误消息。另一个困难的来源是你不必费心阅读文档。您还没有停下来了解NSPredicate格式究竟是什么。文档在这里:
我认为在你的情况下你想说的话肯定是更明智的,比如:
[NSPredicate predicateWithFormat:@"SELF BEGINSWITH %@", string]
尝试一下,看看它是否得到了你期望的结果。