我有一个字典数组。我正在尝试像
这样的东西ANY student.project_code BEGINSWITH[cd] "N8"
抛出的错误是
无法使用不是字符串的内容执行子字符串操作(lhs = <null>
rhs = N8)
问题是一些学生没有项目代码。我如何摆脱这个错误?
答案 0 :(得分:0)
您可以改为使用块谓词:
NSPredicate *p = [NSPredicate predicateWithBlock:BOOL ^(id evaluatedObject, NSDictionary *bindings) {
return [((NSDictionary *)evaluatedObject)["@project_code"] hasPrefix:@"N8"];
}];
块谓词与普通谓词类似,除了不是针对每个对象评估谓词字符串,它只是调用您提供的自定义块,将其传递给当前正在测试的对象,如果是,则返回YES
object符合您的规则,否则为NO
。这为您提供了更大的灵活性,因为您可以在块中运行任何代码,并且不限于SQL风格的条件。
上面的代码创建了一个用于过滤字典数组的谓词,每个字典都有一个project_code
键(如果键不存在,方法将返回nil,因此检查将为false,这正是无论如何你想要。)