NSUserDefaults在设置之前返回

时间:2012-09-26 13:13:43

标签: iphone objective-c ios xcode4.5

我正在创建一个带有两个字符串和一个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"
)

我可以通过记录数组以错误的顺序调用它们。

任何人都可以看到我出错的地方。这是我的第一个目标-c / xcode帖子,所以不确定你想看到什么代码。我会把所有这些都放进去。

http://pastebin.com/BX5gqp17

很抱歉,如果这是很多代码。

感谢您的帮助。

编辑:更新代码

EDIT2:我认为发生的事情与此iOS do the button's action before prepareSegue

类似

2 个答案:

答案 0 :(得分:3)

首先看看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"]);
    }  

现在检查结果

答案 1 :(得分:1)

这样做:

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