我正在尝试更新显示存储在NSUserDefaults
中的硬币数量的标签。
我有一个名为updateCoins的方法,当我添加基于用户活动的硬币时,我调用它来更新UILabel
:
- (void)updateCoins {
self.coinsLabel.text =
[NSString stringWithFormat:@"%d",
[[[NSUserDefaults standardUserDefaults] objectForKey:@"Coins"] intValue]];
NSLog(@"Label: %@", self.coinsLabel.text);
NSLog(@"Coins: %d",
[[[NSUserDefaults standardUserDefaults] objectForKey:@"Coins"] intValue]);
}
然而,在记录器中,我得到以下内容:
Label: (null)
Coins: 10
事情是,我在viewWillAppear
中调用此方法时,会在转换到其他UIViewController
并返回时更新应用。
如果它有助于我以下列方式更新对象:
int coins;
coins = [[[NSUserDefaults standardUserDefaults] objectForKey:@"Coins"] intValue];
[[NSUserDefaults standardUserDefaults] setObject:
[NSString stringWithFormat:@"%d",coins+10] forKey:@"Coins"];
[[NSUserDefaults standardUserDefaults] synchronize];
[self updateCoins];
答案 0 :(得分:1)
self.coinsLabel.text = // replace this with self.treeCoinsLabel.text
[NSString stringWithFormat:@"%d",
[[[NSUserDefaults standardUserDefaults] objectForKey:@"Coins"] intValue]];
NSLog(@"Label: %@", self.treeCoinsLabel.text);
此外,如果你的self.coinsLabel是一个插座,请确认它是否在用户界面上正确连接,如果没有,你必须在使用前分配它。
答案 1 :(得分:0)
希望您在获取已分配(包含其他自定义UILabel的指针)之前将值分配给self.coinsLabel.text
,这就是从子UIViewController返回时更新的原因。
在为其分配值之前,请确保UILabel
已分配。您可以在View加载之前调用此函数。
答案 2 :(得分:0)
在这种情况下有两种可能性。
self.coinsLabel为null且未初始化。
如果在self.coinsLabel = [[UILabel alloc] init];
中执行此操作的- (void)viewDidLoad
仍为nill,则应检查Is it connected from storyboard to class?
。
答案 3 :(得分:-1)
- (void)viewDidLoad:animated
{
[super viewDidLoad:animated];
self.coinsLabel = [[UILabel alloc] init];
}
我猜你忘了初始化UILabel。