2010-05-03 180 views
4

有沒有一種方法可以在將它分配給BOOL之前檢查值是否爲NULL/Nil?如何檢查BOOL是否爲空?

例如,我有一個NSDictionary中的值可以是TRUE/FALSE/NULL

mySTUser.current_user_following = [[results objectForKey:@"current_user_following"]boolValue]; 

當值爲NULL我收到以下錯誤

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSNull boolValue]: unrecognized selector sent to instance 

我想能夠處理NULL情況。

+4

只是讓你清楚的,在對象 - 下列值相等:0,NO,NULL,零。字典的返回值是一個NSNull對象,而不是NULL。這就是爲什麼@ChristopheD正在檢查'[NSNull null]'而不是NULL。 – kubi 2010-05-03 18:23:49

回答

10

您應該check for[NSNull null]

id vUser = [results objectForKey:@"current_user_following"]; 

if (vUser != [NSNull null]) { 
    // do stuff... 
} 
else { 
    // handle the case appropriately... 
} 
+0

爲什麼爲同一個鍵調用'objectForKey:'兩次? – 2010-05-03 18:27:19

+0

@gf:好點,稍微更新了我的文章;-) – ChristopheD 2010-05-03 18:51:19

+3

您還應該檢查是否返回nil,即字典中沒有關鍵字條目。 – JeremyP 2010-05-03 19:28:32

5

您可以先測試,然後有條件地分配,例如,類似如下:

if (NSValue* val = [results objectForKey:@"current_user_following"]) { 
    mySTUser.current_user_following = [val boolValue]; 
} 

此:

  • 避免了存儲在一個變量
  • 結果調用objectForKey:兩次限制變量的作用域到if聲明
  • 作品,因爲nil等於0
  • 因此如果val不是,則僅執行賦值語句

額外檢查的價值是NSNull你必須添加其他測試通過ChristopheD給出,但我質疑閹NSNull這裏是真正需要的 - YES/NO應該是足夠滿足的說明「正在關注「
如果你對一個鍵沒有任何有用的價值,你可以簡單地將它從字典中刪除或不插入它的第一個地方。

+0

您的意思是[val boolValue]而不是[obj boolValue]? – progrmr 2010-05-03 20:03:29

+0

@ kk6yb:哎呀,謝謝。 – 2010-05-03 20:38:59

+1

這對我來說不起作用(用ARC開發10.6個目標)。我得到編譯器ERRORS指出'意外的接口名稱'NSValue':期望的表達式'。我可以刪除檢查內的NSValue的賦值爲零..但這樣做會失敗目的,破壞此解決方案的簡潔性。 – 2012-09-19 13:32:02