ios - NSUserDefaults 不会一致地加载数据

标签 ios objective-c nsuserdefaults

我有一个基于选项卡的应用程序,每次在选项卡之间切换时都想重新加载数据。所以我使用了 viewWillAppear: ,它被调用但数据没有重新加载。这可能是使用大量 [NSUserDefault] 的结果吗? 这是我的代码:

-(void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    [self reloadData];
}

-(void)reloadData {

    //Loading all the data
    totalApples = [[NSUserDefaults standardUserDefaults]integerForKey:@"totalApples"];
    [self setText:[NSString stringWithFormat:@"%.01f", totalApples] withExistingAttributesInLabel:self.applesLabel];

    applesPerSecond = [[NSUserDefaults standardUserDefaults]integerForKey:@"applesPerSecond"];
    [self setText:[NSString stringWithFormat:@"%.01f", applesPerSecond] withExistingAttributesInLabel:self.applesPerSecondLabel];

    applesPerClick = [[NSUserDefaults standardUserDefaults]integerForKey:@"applesPerClick"];
}

最佳答案

使用 NSUserDefaults 时,最好在写入数据后调用 -synchronize

举个例子:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

[defaults setObject:@100 forKey:@"SomeKey"];

[defaults synchronize]; //This will ensure data is written.

如果您不调用此方法,系统会定期调用。但是,它可能会导致您可能遇到的时间问题。

阅读有关 NSUserDefaults 和此行为的更多信息 here .

更新

我认为这个问题现在正在失去它的上下文。这是您在下面的评论中发布的更新方法。可能值得发布后续问题,因为这可能不是 NSUserDefaults 的问题。

至少为了后代,这里有一个使用 NSUserDefaults 写出数据的例子。由于执行乘法,我还更新了将 priceFarmHands 保存为 float 的方法。 (它之前被写成一个整数,可能被截断了)。

- (void)buyFarmhand {
    farmHands++;
    totalApples -= priceFarmHands;

    if(priceFarmHands < 1000) {
        priceFarmHands = priceFarmHands * 1.35;
    } else if(priceFarmHands < 10000) {
        priceFarmHands = priceFarmHands * 1.25;
    } else {
        priceFarmHands = priceFarmHands * 1.15;
    }

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

    [defaults setFloat:priceFarmHands forKey:@"priceFarmHands"];
    [defaults setInteger:farmHands forKey:@"farmHands"];
    [defaults setDouble:totalApples forKey:@"totalApples"];

    [defaults synchronize];

    [self setText:[NSString stringWithFormat:@"%.f", priceFarmHands] withExistingAttributesInLabel:self priceFarmHandsLabel];
    [self setText:[NSString stringWithFormat:@"%d", farmHands] withExistingAttributesInLabel:self.numberFarmhands];
}

关于ios - NSUserDefaults 不会一致地加载数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18686007/

相关文章:

ios - 在屏幕 ios7 之间转换时边缘闪烁

ios - 如何删除已在 Xcode Storyboard中设置的约束

ios - 如何在 NSUserDefaults 中保存 "custom class objects"的 NSMutableArray?

swift - 没有数据通过 NSUserDefaults 传递

ios - UIButton 和滑动手势

ios - UIScrollView : only paging horizontally left, 向右弹跳

c# - Delegate 在 iOS 12.0 中被弃用。请采用WKWebView。我如何在 Xamarin 中解决这个问题?

ios - 弱到强引用在查找时仍然崩溃

iPhone:NSUserDefaults 存储在哪里?

ios - 如何为客户端应用程序创建配置文件?