探索一下,往后臺(tái)傳值的過(guò)程中,遇到的一些問(wèn)題: 后臺(tái)交互的時(shí)候,傳了一個(gè)字典,字典中有可能包含空值
先來(lái)看下現(xiàn)象:
//情況1,直接為nil
NSString *name = nil;
NSDictionary *dic = @{@"givenName":@"W",@"firstName":@"D",@"allName":name,@"gender":@(55)};
NSLog(@"%@",dic);
//此時(shí),直接報(bào)錯(cuò):
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason:
'*** -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object from objects[2]'
//情況2,傳NSNull的實(shí)例變量
NSString *name = [NSNull null];
NSDictionary *dic = @{@"givenName":@"W",@"firstName":@"D",@"allName":name,@"age":@(55)};
NSLog(@"%@",dic);
//打印結(jié)果如下:
Printing description of dic:
{
allName = "<null>";
firstName = D;
age = 55;
givenName = W;
}
所以,看得出來(lái),iOS里的空值還是有區(qū)別的,要好好區(qū)別,不然可能是會(huì)引起崩潰的!
這里來(lái)了解一下他們的概念:

NSNull 在 Foundation 和其它框架中被廣泛的使用,以解決如 NSArray 和 NSDictionary 之類的集合不能有 nil 值的缺陷。你可以將 NSNull 理解為有效的將 NULL 或者 nil 值封裝boxing,以達(dá)到在集合中使用它們的目的。
由此可見(jiàn):NSString中是可以添加為空對(duì)象的,即(nil)
而NSArray, NSDictionary則不行,為了防止崩潰,則使用NSNull來(lái)代替
https://nshipster.cn/nil/
http://m.itdecent.cn/p/6abd21fde286