我有一个基于标签的应用程序 ,并希望每一个我在标签之间切换时重新加载数据 。 所以我用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
这种行为在这里 。
更新
这个问题正在失去它的上下文,现在我的想法。 下面是你在评论贴在下面的更新方法。 因为这可能不是一个问题,这可能是值得张贴跟进质询, NSUserDefaults
。
这里至少为后代是使用的一个例子NSUserDefaults
写出来的数据。 我也更新了你的方法,因为乘法被执行priceFarmHands保存为浮动。 (它被写了作为一个整数,可能被截断之前)。
- (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];
}
我没有看到你创造,它应该在reloadData方法创建的NSUserdefault对象,这应该工作:
-(void)reloadData {
//Loading all the data
NSUserDefaults *appleData = [NSUserDefaults standardUserDefaults];
totalApples = [appleData integerForKey:@"totalApples"];
applesPerSecond = [appleData integerForKey:@"applesPerSecond"];
applesPerClick = [integerForKey:@"applesPerClick"];
//Set the labels text
[self setText:[NSString stringWithFormat:@"%.01f", totalApples]
withExistingAttributesInLabel:self.applesLabel];
[self setText:[NSString stringWithFormat:@"%.01f", applesPerSecond]
withExistingAttributesInLabel:self.applesPerSecondLabel];
}
还帮你解决这个添加一些日志viewWillAppear
:
-(void)viewWillAppear:(BOOL)animated{
NSLog(@"viewWillAppear called, reloadind data...");
[super viewWillAppear:animated];
[self reloadData];
}