使用 NSUserDefaults 保存和检索 UILabel 值

Posted

技术标签:

【中文标题】使用 NSUserDefaults 保存和检索 UILabel 值【英文标题】:Saving and Retrieving UILabel value with NSUserDefaults 【发布时间】:2011-05-18 17:44:31 【问题描述】:

我试图将 UILabel 值保存到 NSUserDefaults。我用这个代码做了IBAction

-(IBAction)saveData:(id)sender 
    NSString *resultString = label.text;
    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
    [prefs setObject:resultString forKey:@"result"];
    [prefs synchronize];


然后,我用Touch Up Inside 将它连接到按钮。 按下按钮后显示的日志:

result = 0;

当我第二次按下时,它就起作用了。

result = "28.34";

我做错了什么以及如何检索结果?

编辑

使用此代码,我会在日志中显示结果。我采取了同样的行动。

NSLog(@"%@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]);

【问题讨论】:

您的日志语句在哪里?请提供那部分代码。 您在哪里以及如何显示结果? 您发布了设置 userdefault 的代码,类似地发布了您使用 nsuserdefault 打印结果值的地方 我不知道如何显示来自 NSUserDefaults 的结果。查看编辑后的代码。 【参考方案1】:

您的代码看起来正确,因此问题可能不是您发布的函数,而是包含您的NSLog 的代码。您可能会以错过第一次设置时的方式记录该值。

【讨论】:

【参考方案2】:

你的日志语句应该是

NSLog(@"%@",[[NSUserDefaults 标准用户默认值] objectForKey:@"result"]);

这应该是在您在 NSUserDefaults 中设置对象之后。

【讨论】:

第二次按下后仍然显示正确的结果。你能帮我从 NSUserDefaults 中检索结果吗?我不知道是什么代码以及我把它放在哪里。 您正在使用“result”键将标签值保存在 NSUserDefaults 中。要从 NSUserDefaults 取回它的值,您需要编写 [[NSUserDefaults standardUserDefaults] objectForKey:@"result"]。但是在获取值之前,我希望值是设置好的。您正在设置单击按钮的值。因此,当您第一次单击该按钮时,我的猜测是不会在 NSUserDefaults 中设置您的值。你的日志语句在你的 saveData 中吗? 我需要把代码放在哪里来检索值?在 MyAppDelegate.m 中?是的,Log 语句在 saveData 中。【参考方案3】:

将它添加到 appDelegate 中的 applicationDidFinishLaunching 或 viewController 的 init 方法中(你必须创建一个):

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];   
if(prefs == nil)  
      
[prefs setObject:@"anything" forKey:@"result"];  
    [prefs synchronize];  
  

【讨论】:

以上是关于使用 NSUserDefaults 保存和检索 UILabel 值的主要内容,如果未能解决你的问题,请参考以下文章

使用 NSUserDefaults 保存数组会使应用程序崩溃

保存到 NSUserDefaults 的字典总是返回 nil

使用 NSKeyedArchiver 将 NSMutableArray 保存到 NSUserDefaults

无法从 NSUserDefaults 检索数据到今天的扩展(Swift)

NSUserDefaults 没有正确保存

(Swift) 将数组存储和检索到 NSUserDefaults