今天測(cè)試項(xiàng)目汤功,無網(wǎng)絡(luò)狀態(tài)下進(jìn)入,會(huì)出現(xiàn)崩潰,看了下崩潰原因:
*** setObjectForKey: object cannot be nil (key: urldata),原來是value值為nil了蹋盆,換成setValue就好用了。
今天總結(jié)下setValue 和setObjectde 有什么區(qū)別:
在使用NSMutableDictionary的時(shí)候經(jīng)常會(huì)使用setValue forKey與setObject forKey硝全,他們經(jīng)常是可以交互使用的栖雾,代碼中經(jīng)常每一種的使用都有。
1.先看看setValue: forKey:的定義
擴(kuò)展NSMutableDictionary的一個(gè)類別伟众,上面注釋說的很清楚析藕,發(fā)送setObject:forKey 給接收者,也就是調(diào)用setObject:forKey方法凳厢,除非value為nil的時(shí)候账胧,調(diào)用方法removeObject:forKey
2.看看setObject:forKey:的定義
注意:setObject:forKey:中Key的對(duì)象是一個(gè)id類型,并不是NSString先紫,只不過我們經(jīng)常使用NSString而已治泥。
3.總結(jié)兩者的區(qū)別:
setObject:forked:中object是不能夠?yàn)閚il的,不然會(huì)報(bào)錯(cuò)遮精。
setValue:forKey:中value能夠?yàn)閚il居夹,但是當(dāng)value為nil的時(shí)候,會(huì)自動(dòng)調(diào)用removeObject:forKey方法
setValue:forKey:中key的參數(shù)只能夠是NSString類型,而setObject:forKey:的可以是任何類型
注意:setObject:forKey:對(duì)象不能存放nil要與下面的這種情況區(qū)分:
[imageDictionary setObject:[NSNullnull] forKey:indexNumber];
[NSNull null]表示的是一個(gè)空對(duì)象准脂,并不是nil劫扒,注意這點(diǎn)
setObject:forKey:中Key是NSNumber對(duì)象的時(shí)候,如下:
[imageDictionary setObject:obj forKey:[NSNumber numberWithInt:10]];
上面說的區(qū)別是針對(duì)調(diào)用者是dictionary而言的意狠。setObject:forKey:方法NSMutabledictionary特有的,而setValue:forKey:方法是KVC(鍵-值編碼)的主要方法粟关。
當(dāng)setValue:forKey:方法調(diào)用者是對(duì)象的時(shí)候:setValue:forKey:方法是在NSObject對(duì)象中創(chuàng)建的,也就是說所有的oc對(duì)象都有這個(gè)方法环戈,所以可以用于任何類。
4.使用:
SomeClass *someObj = [[SomeClass alloc] init];[someObjsetValue:selfforKey:@"delegate"];
表示的意思是:對(duì)象someObj設(shè)置他的delegate屬性的值為當(dāng)前類澎灸,當(dāng)然調(diào)用此方法的對(duì)象必須要有delegate屬性才能設(shè)置院塞,不然調(diào)用了也沒效果。