由于未捕获的异常 'NSInvalidArgumentException' 而终止应用程序,原因:“*** setObjectForKey:对象不能为零(键:索引)”

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** setObjectForKey: object cannot be nil (key: index)'

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

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 数据

的数组

请帮帮我 提前致谢

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

对于错误本身(消息不是很明确),我想这就是为什么尝试使用 c 键在 CityCodeZone 上下标,得到 nil,然后这就是为什么你得到一个 setObject:forKey: 且没有错误的原因(你不能在对象上放置 nil 值)。

习惯上,我喜欢把保留谓词大写,如果是保留词,有"action" => CONTAINS[c],读起来更方便,但这只是我的口味。