我有一个基于选项卡的应用程序,每次在选项卡之间切换时都想重新加载数据。所以我使用了 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/