2012-03-26 115 views
0

一點點的noob在這裏。我沒有能夠通過閱讀這些板解決我的問題 - 任何人都可以發現這個問題:卡住在NSUserDefaults

我有一個標籤,我想每天更新,我試圖用NSUserDefaults。

-(id)init{ 
    ... 
    ... 
    NSDate *date = [NSDate date]; 
    NSString *todaysDate = [NSString stringWithFormat:@"%@", date]; 

    [self createLabel:todaysDate]; 
    } 

    -(void)createLabel:(NSString*)theDate{ 

    if([[NSUserDefaults standardUserDefaults] objectForKey:theDate] == nil){ 

    myLabel.text = [someOtherClass getAppropriateString]; 

    [[NSUserDefaults standardUserDefaults] setObject:[mylabel text] forKey:theDate]; 

}else{ 

    myLabel.text = [[NSUserDefaults standardUserDefaults] stringForKey:theDate] 

    } 

} 

編輯:

感謝您的幫助球員。在寫這個問題時,我實際上意識到了我的錯誤!

剛做了一個快速測試。

如果有人感興趣:今天的日期字符串包括分鐘和秒,這意味着每次運行應用程序並將其保存爲NSUserDefault時,情況都會不同。

我添加了一個日期格式化程序,它現在可以工作。

+0

什麼問題了嗎? – Hiren 2012-03-26 12:37:14

+0

忘了[[NSUserDefaults standardUserDefaults] synchronize]; ? – NeverBe 2012-03-26 12:41:05

回答

1

您可能忘記了synchronize您的更改。添加[[NSUserDefaults] synchronize];setObject:forKey:行後

+1

我只想說我學會了如何使用同步。 NSUserDefaults具有智能機制來持久地寫東西。所以不要調用同步,除非它用於調試。在這裏他應該使用實例變量。在userDefaults中使用局部變量效率不高。 – Vignesh 2012-03-26 12:58:25

+0

同步 - 從Apple文檔:「因爲此方法是定期自動調用的,所以只有當您不能等待自動同步(例如,如果您的應用程序即將退出)或者如果您想要更新即使您沒有進行任何更改,用戶仍默認使用磁盤上的內容。「 – markhunte 2012-03-26 17:35:37

+1

有時您不能等待自動同步,您必須手動執行此操作。 – Alexander 2012-03-26 20:01:04

0

試試這個

-(void)createLabel:(NSString*)theDate 
{ 
    if([[NSUserDefaults standardUserDefaults] objectForKey:theDate] == nil){ 
     myLabel.text = [someOtherClass getAppropriateString]; 

     [[NSUserDefaults standardUserDefaults] setObject:[mylabel text] 
                forKey:theDate]; 
     [[NSUserDefaults standardUserDefaults] synchronize]; 
    }else{ 
     myLabel.text = [[NSUserDefaults standardUserDefaults] objectForKey:theDate]; 
    } 
} 
0
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init]; 
[dateFormatter setDateStyle:NSDateFormatterStyleLong]; 
NSString *todaysDate = [dateFormatter stringFromDate:date];