2012-03-26 133 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];