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

Ios 由于未捕获异常而终止应用程序';NSInvalidArgumentException';,原因:';***setObjectForKey:object不能为nil(key:index)';,ios,objective-c,nsstring,nspredicate,predicate,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 =[[se

我正在开发一个自动完成的文本字段,这就发生了

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:谓词] 拷贝]

Filteredar是一个数组 searcharray是一个接收json数据的数组

请帮帮我 提前谢谢

NSPredicate *predicate = [NSPredicate predicateWithFormat:@" CityCode[c] contains %@ OR Zone[c] contains %@ ",substring,substring];
您需要将
[c]
(不区分大小写)放在保留字
包含的
之后,而不是放在
键上

=>

对于错误本身(消息不是很明确),我想这就是为什么试图用
c
键在
CityCode
Zone
上下标,得到nil,这就是为什么你得到了一个带有nil错误的
setObject:forKey:
(你不能在对象上输入
nil
值)


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

看起来你的子字符串是空的。子字符串不是空的。。。但在发送到空数组时,出现了问题,因为您试图在数组中不添加任何内容,因此出现了错误。您需要检查
[searchArray FilteredArray UsingPredicate:predicate]
是否返回某些内容,并且只返回
filteredarr
中包含[c]@的
副本,还是区域包含[c]@
?这似乎可以解决问题,但我不知道为什么。我想,不知何故,它可能在
CityCode
上使用
subscript
c
以及为什么你会得到一个“setObject:ForKey:”和nil。谢谢@Larme。成功了。你是个救生员
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"CityCode contains[c] %@ OR Zone contains[c] %@ ",substring,substring];