2017-07-06 34 views
0

我开发一个自动填充文本字段,这事终止应用程序由于未捕获的异常“NSInvalidArgumentException”,原因:“*** setObjectForKey:对象不能是零(关键:指数)”

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

filteredarr是后一个数组 searcharray是把JSON数据

阵列请帮我提前 感谢

+0

看起来你的子串是空的。 –

+0

substring不是空的......但是当发送到一个空数组时,问题发生了 –

+0

是的,因为你试图在数组中不加任何东西,因此错误。您需要检查是否'[searchArray filteredArrayUsingPredicate:谓语]'返回的东西,只有'copy'在'filteredarr' –

回答

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

对于错误本身(消息不太明确的),我想这就是为什么试图在CityCodeZone下标有c键,让零,这就是为什么你得到了与零误差setObject:forKey:(你不能把一个nil值放在一个对象上)。

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

相关问题