xcode - 更改视图时标签更改值

时间:2014-06-14 08:43:11

标签: ios objective-c xcode

我已经四处寻找,找不到任何东西,帮助将不胜感激。我是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];

}

非常感谢任何帮助!

2 个答案:

答案 0 :(得分: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];
}

答案 1 :(得分:0)

您的coinAmount属性并非通过应用启动或创建它的view controller的初始化来保持不变。您应该考虑在数据库中保留此值(例如CoreData)或NSUserDefaults

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

CoreData

NSUserDefaults