我在哪里放置循环?

时间:2014-07-21 10:03:47

标签: objective-c

我真的需要一些帮助来放置这个循环:

int timer = 10;
while (timer >= 0) {
[secondsLeft setText:[NSString stringWithFormat:@"%d", timer]];
NSLog(@"%d", timer);
timer--;
sleep(1);
}

无论如何,无论我把这个循环放在哪里,我都会遇到一些错误,除了在IBAction下它完全正常工作,除非它按下按钮按下10秒:P

这是我的.m文件

#import "ViewController.h"

@interface ViewController ()


@end


@implementation ViewController
@synthesize answer;
@synthesize secondsLeft;

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

}


- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.

}

}

- (IBAction)answerButton:(id)sender {

    NSString *str = answer.text;        // Takes user input from answer.text
    int answerOne = [str intValue];     // converts answer into an integer

    if(answerOne == 30) {
        self.secondsLeftToAnswer.text = @"Correct!";
    } else {
            self.secondsLeftToAnswer.text = @"You Suck at Math!";
        }
    }

@end

无论如何有人可以告诉我如何将这个循环实现到我的代码中,以便循环显示其输出到UILabel(secondsLeft是UILabel,循环应该在UILabel中显示从10到0的倒计时)?

编辑:我如何实施NSTimer来做我想做的事情(从10倒计时)?我试图设置一个,但他们是如此令人困惑。感谢Jasarien的帮助!

2 个答案:

答案 0 :(得分:4)

答案是“无处”。 Cocoa是一个事件驱动的系统,这样的循环阻止主线程处理事件,你不会看到标签更改的文本和用户交互将被禁用。有关详细信息,请参阅Main Event Loop文档。

而是使用NSTimerfor example),它与runloop一起使用以允许定期方法调用。

答案 1 :(得分:0)

为了显示倒计时,您需要在特定时间后更新标签。

以下是描述您想要的功能的代码。

- (void)viewDidLoad
{
[super viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

count = 10;
timer = [NSTimer scheduledTimerWithTimeInterval:1.0
                                         target: self
                                       selector: @selector(handleTimer)
                                       userInfo: nil
                                        repeats: YES];
}


-(void)handleTimer{

if (count >= 0) {
    [lblTimer setText:[NSString stringWithFormat:@"%ld",(long)count]];
    count--;

}else{
    [timer invalidate];

}

}

希望这会对你有所帮助。快乐的编码:)