简单的iPhone理货方法问题

时间:2010-04-26 03:52:30

标签: iphone

只需尝试创建一个简单的方法,当按下按钮时,该计数会在计数器上计数1。我的知识非常有限,我很确定我的问题出在方法实现的某个地方:

-(IBAction) updateTally:(id) sender {
    NSString *text;
    int total = 0;
    total = total + 1;
    text=[[NSString alloc] initWithFormat: @"%i", total];
    lblTally.text = text;
}

我已经为lblTally UILabel和updateTally方法完成了必要的接口声明。我怀疑我正在制作某种NSString / int /%i /%@ mixup,但我不确定如何修复它。当我运行程序时,它在iphone的lblTally标签字段中显示0。当我按下按钮时,它会在该字段中显示1。但是,如果我继续按下按钮 - 没有任何反应,它只是一个1.当我不断地按下按钮时,我如何计算它?

2 个答案:

答案 0 :(得分:2)

问题是您要在每个updateTally中重新初始化总计。您需要将标记存储在成员变量中,或者从字符串中提取现有标记,更新它,然后将其写回字符串。

- (IBAction) updateTally:(id) sender
{
    int oldtally = [lblTally.text integerValue];
    int newtally = oldtally + 1;
    lblTally.text = [NSString stringWithFormat:"%d",newtally];
}

我还应该指出你当前的代码有内存泄漏(你调用alloc / init,但是在你将结果分配给lblTally.text变量之后你就不会调用release)。您应该在lblTally.text = text之后调用[text release],或者您应该像我上面使用的那样使用stringWithFormat,它使用自动释放,因此不需要显式释放字符串(因为它将自动释放)。 / p>

答案 1 :(得分:1)

每次方法运行时,您都会重新初始化总变量。

int total = 0;

移动方法之外的代码行。我不做苹果开发,但它会像:

int total = 0;
-(IBAction) updateTally:(id) sender {
    NSString *text;
    total = total + 1;
    text=[[NSString alloc] initWithFormat: @"%i", total];
    lblTally.text = text;
}