2015-01-02 34 views
0

我正在測試,看看字符串是否存儲在NSUserDefaults。從理論上講,我認爲下面就是答案:字符串通過空測試,返回null

在實踐中,它總是測試的東西在那裏,但隨後返回的值「(空)」,當我嘗試使用它。有人能告訴我爲什麼嗎?

最終,我認爲我已經解決了以下問題,但我不清楚爲什麼第一個測試用例不能如我所料。

if ([[[NSUserDefaults standardUserDefaults] authorName] length] != 0) 

謝謝。

+0

從你的片段,你永遠不設置'NSUserDefaults'空字符串值,所以它的'nil'(除非你初始化其他地方) – dogsgod

+0

它是零,或者它是空的?寫入時字符串輸出(空)。 – DenVog

回答

1

nil字符串不等於空字符串。這就是爲什麼第一次測試通過但返回nil - 因爲如果沒有存儲值,NSUserDefaults將返回nil。

爲什麼比較長爲零的作品,是因爲呼籲在Objective-C一nil引用的方法時,nil返回的原因。這與大多數其他語言不同,在這種情況下反而會拋出異常。因爲長度是NSInteger,所以nil變爲零。

將長度與零比較應該是安全的,但是您真正想要測試的是在默認情況下是否爲給定鍵存儲字符串。在這種情況下,你可以簡單地比較爲零:

if ([[NSUserDefaults standardUserDefaults] authorName] != nil) 
{ 
    .... 
} 
+0

你並不需要'!= nil'部分。 – rmaddy

+0

不,不需要,因爲ObjC中的非零值是真實的。但是,它更好地捕捉了代碼的意圖,恕我直言。 – driis

+0

字符串在寫入時實際輸出(null)。在這種情況下,零和零是同義詞嗎? – DenVog