我有一个计时器的无符号整数。但是,当我将其减去1且值为零时,它将显示一个正数。像这样:http://prntscr.com/2wkydb
这是我的代码Viewcontroller.m:

-(IBAction)btnUp:(id)sender
{
    timer = timer + 1;
    lblTimer.text = [NSString stringWithFormat:@"%u", timer];
}
-(IBAction)btnDown:(id)sender
{
    timer = timer - 1;
    lblTimer.text = [NSString stringWithFormat:@"%u", timer];
}
-(IBAction)btnRestart:(id)sender
{
    lblTimer.text = [NSString stringWithFormat:@"0"];
}


Viewcontroller.h:

@interface ViewController : UIViewController
{
    unsigned int timer;
    IBOutlet UILabel *lblTimer;
}
-(IBAction)btnUp:(id)sender;
-(IBAction)btnDown:(id)sender;
-(IBAction)btnRestart:(id)sender;

@end


我该怎么办,它不会显示正数,但计时器保持为0?
提前致谢。

编辑:我也不希望计时器显示一个负值。

最佳答案

无符号整数“环绕”。从零减去1得到(假设32位整数):

0xFFFFFFFF = 4294967295


如果您不想这样做,则将代码更改为:

if (timer > 0)
    timer = timer - 1;


更好的是,当值达到零时禁用“向下”按钮,然后启用
值为正时再次输入。

诸如此类(未经测试,未经编译器检查):

-(IBAction)btnUp:(UIButton *)sender
{
    timer = timer + 1;
    lblTimer.text = [NSString stringWithFormat:@"%u", timer];
    self.downButton.enabled = YES;
}
-(IBAction)btnDown:(UIButton *)sender
{
    timer = timer - 1;
    lblTimer.text = [NSString stringWithFormat:@"%u", timer];
    sender.enabled = (timer > 0);
}

关于ios - 显示一个u int。当值为0时我减去1会得到一个正数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22097689/

10-12 00:42
查看更多