2010-04-29 103 views
0

在應用程序委託didFinishLaunching方法值將被用作新的設置爲用戶捆綁:無法讀取從[NSUserDefaults的standardUserDefaults]後同步

NSNumber *testValue = (NSNumber*)[[NSUserDefaults standardUserDefaults] objectForKey:@"settingsversion"]; 
if (testValue == nil) 
{ 
    NSNumber *numNewDB = [NSNumber numberWithBool:NO]; 
    NSNumber *numFirstUse = [NSNumber numberWithBool:YES]; 
    NSDate *dateLastStatic = [NSDate date]; 
    NSDate *dateLastMobile = [NSDate date]; 
    NSNumber *numSettingsversion = [NSNumber numberWithFloat:1.0]; 

    NSDictionary *appDefaults = [NSDictionary dictionaryWithObjectsAndKeys: 
           numNewDB, @"newdb", 
           numFirstUse, @"firstuse", 
           numSettingsversion, @"settingsversion", 
           dateLastStatic, @"laststaticupdate", 
           dateLastMobile, @"lastmobileupdate", 
           nil]; 
    [[NSUserDefaults standardUserDefaults] registerDefaults:appDefaults]; 
    [[NSUserDefaults standardUserDefaults] synchronize]; 
} 

後來在另一個ViewController中,我試圖從同一個字典中讀取一個值,保存爲NSUserDefaults - 至少我認爲會這樣,但是我沒有得到任何有效的對象指針lastUpdate:

in .h file:

NSDate *lastUpdate; 
在一個成員函數的.m文件

lastUpdate = (NSDate *)[[NSUserDefaults standardUserDefaults] objectForKey:@"laststaticupdate"]; 

甚至,如果我打印出[NSUserDefaults的standardUserDefaults]的內容我只得到這樣的:

2010-04-29 15:13:22.322 myApp[4136:207] Content of UserDefaults: <NSUserDefaults: 0x11d340> 

這使我得出的結論是沒有標準的UserDefaults字典在內存中的某個地方,或者它不能被確定爲這樣的結構。

編輯:每次我重新啓動應用程序ión設備,檢查testValue是零,我正在建立字典了,但一次運行後它應該是持久的電話,對不對?

我在哪裏做錯了什麼地方?我有這樣的感覺,我還沒有真正理解如何加載和保存iPhone上某個應用程序的持續設置。

除此之外,我還有什麼要做嗎?在XCode中集成settings.bundle或手動將字典保存到Documents文件夾?

有人可以幫我嗎?非常感謝!

回答

0

registerDefaults實際上並沒有向磁盤寫入任何內容。它只是在內存中創建一個'defaults defaults'字典。所以每次你重新啓動應用程序,testValue應該是零。

如果要設置持久值,請使用setObject:forKey:

但我不知道爲什麼你沒有收到有效的對象。

+0

非常感謝!這是保存值的問題。我誤解了文檔。 :) – Nonlinearsound 2010-04-29 14:07:08

+0

難道是[[NSUserDefaults standardUserDefaults] registerDefaults:appDefaults];引用和保留字典,並由此給了我一個有效的指針?正如我沒有使用setObject:我沒有得到有效的條目,但有效的字典指針 - 當然沒有保存到用戶的默認值。 – Nonlinearsound 2010-04-29 14:32:47