因未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'*** setObjectForKey:object不能为nil(key:index)'

时间:2017-07-06 11:22:07

标签: ios objective-c nsstring nspredicate predicate

我正在开发一个自动填充文本字段,这件事发生了

NSString *substring = [NSString stringWithString:autocompleteTextField.text];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@" CityCode[c] contains %@ OR Zone[c] contains %@ ",substring,substring];
filteredarr =[[searchArray filteredArrayUsingPredicate:predicate] copy];

发生错误
  

filteredarr = [[searchArray filteredArrayUsingPredicate:predicate]   复制];

filteredarr是一个数组 searcharray是一个采用json数据的数组

请帮帮我 提前致谢

1 个答案:

答案 0 :(得分:1)

NSPredicate *predicate = [NSPredicate predicateWithFormat:@" CityCode[c] contains %@ OR Zone[c] contains %@ ",substring,substring];

您需要将[c](不区分大小写)放在保留字contains之后,而不是key

=>

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"CityCode contains[c] %@ OR Zone contains[c] %@ ",substring,substring];

对于错误本身(消息不是很明确),我猜这就是为什么尝试使用CityCode键在Zonec上下标,得到nil,这就是为什么你得到一个setObject:forKey:时出现nil错误(你不能在对象上放一个nil值。)

对于习惯,我喜欢将保留的谓词单词放在大写中,如果它是一个保留字并且有一个“action”=>则更容易阅读。 CONTAINS[c],但这只是我的口味。