【问题标题】:NSUserDefaults returns before it has been setNSUserDefaults 在设置之前返回
【发布时间】:2012-09-27 21:44:57
【问题描述】:

我正在制作一个需要两个字符串和一个 int 的应用程序。我希望这些显示在另一个视图上。

我已将它们放入一个数组中,并尝试将它们存储在 NSUserDefaults 中。我已经设法存储了这些数据。我遇到的问题是,当我更改数据并再次保存时,获取数组的函数在设置它的函数之前被调用。所以应用程序总是显示以前的数据。

我认为通过更改调用函数的时间来修复它会很容易。

但从代码来看,我认为它们的顺序是正确的。

2012-09-26 13:55:02.764 BeerDivider[4377:907] array returnd = (
    2,
    "Person 1",
    "Person 2"
)
2012-09-26 13:55:02.773 BeerDivider[4377:907] array saved = (
    5,
    "Person 1",
    "Person 2"
)

我可以从记录数组中看到它们以错误的顺序调用。

请任何人都可以看到我哪里出错了。这是我的第一篇objective-c/xcode 帖子,所以不确定你想看什么代码。我会把它全部放进去。

http://pastebin.com/BX5gqp17

对不起,如果这是很多代码。

感谢您的帮助。

编辑:更新代码

EDIT2:我认为正在发生的事情类似于iOS do the button's action before prepareSegue

【问题讨论】:

  • 视图控制器是如何加载的?我在代码中没有看到。如果它在标签栏控制器中,那么第二个可能首先被加载?我没有看到代码中有任何明显的错误。尝试使用断点跟踪代码路径。

标签: iphone objective-c ios xcode4.5


【解决方案1】:

首先看看NSUserDefault的Apple文档
NSUserDefault 总是返回你保存在里面的数据

别忘了写[defaults synchronize];

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:yourArray forKey:@"YourKey"]
    [defaults synchronize];

根据你给定的代码。

-(void)saveInfo:(NSArray *)myArray
    {
         NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:myArray forKey:@"array"];
    [defaults synchronize];
    NSLog (@"array saved = %@", [defaults objectForKey:@"array"]);
    }  

现在检查结果

【讨论】:

  • 非常感谢。我花了一个小时试图解决这个问题!
  • 它仍然返回前一个数组
  • @Will 当然它会返回原始数组 :) 在您的 pastebin 代码中您在原始数组上使用 NSLog,而不是 NSUserDefaults 中的那个。
  • 在 ApplicationViewController.m -(void)saveInfo:(NSArray *)myArray
  • 旁注,您应该研究在视图控制器之间传递信息的不同方式,这不是 NSUserDefaults 的用途。
【解决方案2】:

这样做:

-(void)saveInfo:(NSArray *)myArray
{
    [[NSUserDefaults standardUserDefaults] setObject:myArray forKey:@"array"];
    [[NSUserDefaults standardUserDefaults] synchronize]; //u forgot this
    NSLog (@"array saved = %@", myArray);
}

【讨论】:

  • 非常感谢。我花了一个小时试图解决这个问题!
猜你喜欢
  • 1970-01-01
  • 2022-10-07
  • 1970-01-01
  • 2019-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多