更新UILabel返回Null?

时间:2014-03-19 08:26:01

标签: ios iphone objective-c uilabel updating

我正在尝试更新显示存储在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];

4 个答案:

答案 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。