【问题标题】:xcode - Label changes value when I change viewsxcode - 当我更改视图时标签更改值
【发布时间】:2014-06-14 08:43:11
【问题描述】:

我四处寻找,找不到任何东西,不胜感激。我对 Objective-C 和 Xcode 很陌生。

在我的应用中,玩家从 100 个硬币开始,这在一个标签中表示。当用户点击一个按钮花费 10 个硬币时,会出现一个弹出框并询问“你确定吗”,用户可以点击确定或取消。

如果用户点击“确定”,他们会花费 10 个硬币。目前,在模拟器中,当我在同一个视图中时,一切都很好,100 下降到 90 等等...... 但是当我转到另一个视图然后再返回时,硬币数量又回到了 100。用户退出应用时也是如此。

这是我的代码:

.h 文件

//Coin
IBOutlet UILabel * coinCount;

.m 文件

int coinAmount = 100;

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
if (buttonIndex == 0)
{
    NSLog(@"user pressed Cancel");
    // Any action can be performed here
}
else
{
    NSLog(@"user pressed OK");

    coinAmount -= 10;
    [coinCount setText:[NSString stringWithFormat:@"%d", coinAmount]];
    NSString * string = [NSString stringWithFormat:@"%d", coinAmount];

    //Save coin amount
    NSString * saveCoinAmount = string;
    NSUserDefaults * defaultsCoinAmount = [NSUserDefaults standardUserDefaults];
    [defaultsCoinAmount setObject:saveCoinAmount forKey:@"saveCoinLabel"];
    [defaultsCoinAmount synchronize];
}

}

这似乎保存了新的硬币数量,所以现在当用户转到另一个视图并返回时,我尝试加载保存的硬币数量:

   - (void)viewDidLoad
{
[super viewDidLoad];
//Coin Label
NSUserDefaults * defaultsLoadCoin = [NSUserDefaults standardUserDefaults];
NSString * loadCoinLabel = [defaultsLoadCoin objectForKey:@"saveCoinLabel"];
[coinCount setText:loadCoinLabel];

}

任何帮助将不胜感激!

【问题讨论】:

  • 您将值保存在 nsuserdefault 中,并且您的局部变量值为 -10。您需要 -10 nsuserdefult 变量。

标签: ios objective-c xcode


【解决方案1】:

您的问题是您将硬币存储在两个地方 - 一个整数变量和标签。当您返回您的视图时,您将保存的硬币数量直接恢复到标签中,但是当您执行“购买”时,您使用的是整数,该整数已重新初始化为 100。

我也建议你改掉使用实例变量的习惯,使用属性。

你应该这样做 -

.m 文件

@interface MyClass ()             // Change this to suit your class name

@property NSInteger coinAmount;
@property (weak,nonatomic) IBOutlet UILabel *coinLabel;

@end


@implementation MyClass

- (void)viewDidLoad
{
   [super viewDidLoad];
//Coin Label
   NSUserDefaults * defaultsLoadCoin = [NSUserDefaults standardUserDefaults];
   if ([defaultsLoadCoin objectForKey:@"coins] == nil) {
      self.coinAmount=100;
      [defaultsLoadCoin setInteger:self.coinAmount forKey:@"coins"];
   }
   else {
      self.coinAmount = [defaultsLoadCoin integerForKey:@"coins"];
   }

   self.coinLabel.text=[NSString stringWithFormat:@"%ld",self.coinAmount];

}

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
if (buttonIndex == 0)
{
    NSLog(@"user pressed Cancel");
    // Any action can be performed here
}
else
{
    NSLog(@"user pressed OK");

    self.coinAmount -= 10;
    self.coinLabel.text=[NSString stringWithFormat:@"%ld",self.coinAmount];

    //Save coin amount
    NSString * saveCoinAmount = string;
    NSUserDefaults * defaultsCoinAmount = [NSUserDefaults standardUserDefaults];
    [defaultsCoinAmount setInteger:self.coinAmount forKey:@"coins"];;
    [defaultsCoinAmount synchronize];
}

【讨论】:

    【解决方案2】:

    您的coinAmount 属性不会通过应用启动或创建它的view controller 的初始化而持久化。您应该考虑将这个值保存在数据库中(如CoreData)或NSUserDefaults

    我的建议:从基础开始(文档链接):

    CoreData

    NSUserDefaults

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-09
      • 1970-01-01
      • 1970-01-01
      • 2014-09-02
      • 1970-01-01
      • 2020-04-05
      • 1970-01-01
      相关资源
      最近更新 更多