2016-01-22 15 views
-4

我正在使用NSUserDefaults來檢索值。比如用戶名。iOS9和XCode 7中的NSUserDefaults不返回值

我創建了一個constants.h文件添加它在我的ViewController這樣

#import "constants.h" 

在constants.h - 用戶名被定義爲

#define USERNAME @"Monty Python" 

然後在我viewDidLoad中,我嘗試並讀取像這樣的值

NSString *userName = [[NSUserDefaults standardUserDefaults] stringForKey:USERNAME]; 

但是userName是全部的nil/null - 我的其他鍵也是如此。

NSUserDefaults如何知道如何使用我的Constants.h文件?我的代碼是否在正確的「位置」中查找?爲什麼我的值始終爲零 - 無論是在調試器和NSLog中?

THX

+2

你需要取回之前保存在用戶的默認值。 – Cristik

+1

我想你在檢查結果之前先設置對象? 此外,你只是使用宏(#define),所以NSUserDefault不需要「知道」常量文件 – OhadM

+1

如果代碼編譯,那麼原因不是預處理器宏'用戶名'作爲常量 – vadian

回答

2
NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults]; 

保存:

[currentDefaults的setObject:@ 「喬恩」 forKey:@ 「MYNAME」];

獲取:

[currentDefaults objectForKey:@ 「MYNAME」]

5
NSUserDefaults的

如何知道使用我的Constants.h文件?

它沒有。兩者之間沒有任何關係,任何期望會有一個都是錯誤的。您的Constants.h文件在代碼中配置了一些全局變量,作爲全局變量提供給您的其他代碼(假設代碼導入該文件)。 NSUserDefaults是一種在磁盤上保存和檢索.plist文件的鍵值對的一種方式。它們完全不同,完全不同的目的。

在代碼中,您使用的是Constants.h文件作爲NSUserDefaults的中要使用的的名稱提供您的代碼的方式。這是很好的做法!但是這與這些密鑰對應的如何首先將變成 NSUserDefaults無關。

設置「默認默認值」(也就是每個鍵值對的初始值保存在NSUserDefaults中)的方法 - 如果這就是你想要做的 - 是通過很早運行的代碼,請致電registerDefaults: