由于今天在NSDictionary初始化的時候跳坑弟劲,出現Crash,故寫此博客和大家分享下如何跳坑
NSDictionary初始化
Objective-C中镶摘,NSDictionary初始化的方法有很多種
方法1:[NSDictionary dictionaryWithObjectsAndKeys:<#(id), ...#>, nil]
方法2:NSDictionary *dic = @{@"key":value}
坑在哪里嗽桩?
坑就在第二種初始化方法NSDictionary *dic = @{@"key":value}
它到底是如何坑的呢?
如果你的value是為nil 必將引發(fā)崩潰:
'NSInvalidArgumentException', reason: '*** -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]
意思就是說使用[__NSPlaceholderDictionary initWithObjects:forKeys:count:]這個初始化方法凄敢,發(fā)現keys count和objcects的個數不匹配了
如何規(guī)避碌冶?
在使用@{@”key”:value} 這種方式初始化的時候,一定要對value做是否為nil的判斷贡未,為nil就不要加入Dictionary
或
使用標準的初始化方法:
NSDictionary dictionaryWithObjectsAndKeys:value1,@"v1",value2,@"v2",value3,@"v3", nil];
或其它的幾個初始化方法進行初始化种樱,這樣如果value為nil就不會加入字典,使用 objectForKey:取出來的對象就會為nil對象俊卤,不會引發(fā)崩潰嫩挤。
關聯(lián):
使用@[]方法初始化NSArray也有此坑,規(guī)避方法同字典一樣