我正在測試,看看字符串是否存儲在NSUserDefaults。從理論上講,我認爲下面就是答案:字符串通過空測試,返回null
在實踐中,它總是測試的東西在那裏,但隨後返回的值「(空)」,當我嘗試使用它。有人能告訴我爲什麼嗎?
最終,我認爲我已經解決了以下問題,但我不清楚爲什麼第一個測試用例不能如我所料。
if ([[[NSUserDefaults standardUserDefaults] authorName] length] != 0)
謝謝。
我正在測試,看看字符串是否存儲在NSUserDefaults。從理論上講,我認爲下面就是答案:字符串通過空測試,返回null
在實踐中,它總是測試的東西在那裏,但隨後返回的值「(空)」,當我嘗試使用它。有人能告訴我爲什麼嗎?
最終,我認爲我已經解決了以下問題,但我不清楚爲什麼第一個測試用例不能如我所料。
if ([[[NSUserDefaults standardUserDefaults] authorName] length] != 0)
謝謝。
nil
字符串不等於空字符串。這就是爲什麼第一次測試通過但返回nil
- 因爲如果沒有存儲值,NSUserDefaults將返回nil。
爲什麼比較長爲零的作品,是因爲呼籲在Objective-C一nil
引用的方法時,nil
返回的原因。這與大多數其他語言不同,在這種情況下反而會拋出異常。因爲長度是NSInteger,所以nil
變爲零。
將長度與零比較應該是安全的,但是您真正想要測試的是在默認情況下是否爲給定鍵存儲字符串。在這種情況下,你可以簡單地比較爲零:
if ([[NSUserDefaults standardUserDefaults] authorName] != nil)
{
....
}
從你的片段,你永遠不設置'NSUserDefaults'空字符串值,所以它的'nil'(除非你初始化其他地方) – dogsgod
它是零,或者它是空的?寫入時字符串輸出(空)。 – DenVog