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];