2013-08-20 27 views
2

我向NSUserDefaults添加一個字典並調用'synchronize'方法,但是當我關閉我的應用並重新打開它時,保存在NSUserDefault中的值爲零。NSUserDefaults沒有被保存在模擬器中,儘管我使用同步

#define kStartTime @"startTime" 
#define kEndTime @"endTime" 
NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults]; 
NSString *[email protected]"08:00"; 
NSString *[email protected]"18:00"; 
NSDictionary *dict=[[NSDictionary alloc] initWithObjectsAndKeys:startTime,kStartTime, 
          endTime,kEndTime, 
          nil]; 
[defaults registerDefaults:dict]; 
[defaults synchronize]; 

而在viewDidLoad方法我稱之爲:

NSString *startTimeValue=[defaults stringForKey:kStartTime]; 

的startTimeValue仍然是零。當我重新打開我的simulator.Is UserDefaults應用程序無法在模擬器保存???

我的觀點是當我關閉我的應用程序並在模擬器中重新打開它的值不見了。

我搜索了蘋果文檔後,我得到了這個。

registerDefaults:

正如在Apple文檔中所述:將指定字典的內容添加到註冊域。

* 註冊域的內容不寫入磁盤; *每次啓動應用程序時都需要調用此方法。您可以在應用程序的資源目錄中放置一個plist文件,並調用registerDefaults:您從該文件讀入的內容。

所以registerDefaults:的功能在應用程序設置的默認值,默認值將不會受到synchronize

+0

檢查我更新的答案...只需複製它,然後運行即可獲取值... – Jitendra

+0

嘗試保存整個字典,如:[defaults setValue:dict forKey:@「dictionary」];並像這樣獲取它:NSMutableDictionary * dict = [[NSMutableDictionary alloc] init];和dict = [defaults valueForKey:@「dictionary」]; –

+0

我剛剛編輯你的代碼,並正常工作檢查它...... – Jitendra

回答

-1
NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults]; 
    NSDictionary *dict=[[NSDictionary alloc] initWithObjectsAndKeys:startTime,@"kStartTime", 
         endTime,@"kEndTime", 
         nil]; 
    [defaults registerDefaults:dict]; 
    [defaults synchronize]; 


    NSString *startTimeValue=[defaults stringForKey:@"kStartTime"]; 

    NSLog(@"%@",startTimeValue); 

你需要添加鍵,如@「價值」這樣的存儲磁盤。

現在試試這個代碼....

+0

如果kEndTime是一個常量,爲什麼你需要做這個@「kEndTime」作爲關鍵字? – sbarow

+1

謝謝,但'kStartTime'是'#define kStartTime @「###」',我忘了粘貼出來。我會盡快編輯它。 – kongkong

+0

@JitendraDeore這個答案並不能解決我的問題。 – kongkong

1

我想你試試您已註冊的默認值之前從讀NSUserDefaults的價值。 如果您註冊默認值,這些值不會保存到磁盤,它們將不會持續到下一次應用程序啓動。每次啓動應用程序時都必須註冊默認值。

當您從NSUserDefaults中讀取對象並且您之前未保存過某個值時,將返回已註冊的默認值。如果您之前已保存過某個值,則會返回該值。

在您發佈的代碼中,您沒有將任何內容保存到userDefaults。所以你已經註冊爲默認的值將被返回。如果你還沒有註冊任何值,這將返回零。

註冊默認值的代碼應放在應用程序生命週期中很早運行的方法中。我建議使用application:didFinishLaunchingWithOptions:

如果要將多個值保存到NSUserDefaults,則必須使用多個setObject:forKey:調用。
registerDefaults:不能同時保存多個鍵到NSUserDefaults!

+0

它真的適合我!我用'SetObject:forKey:'替換'registerDefaults:'。 :) – kongkong

+0

registerDefaults可以將多個鍵保存到NSUserDefaults。問題在於'registerDefaults:'。正如Apple文檔中所述:將指定字典的內容添加到註冊域。 **註冊域的內容不寫入磁盤;您需要每次啓動應用程序時調用此方法** – kongkong