Objective c CocoaTouch-切换UIViewController后如何停止循环?

Objective c CocoaTouch-切换UIViewController后如何停止循环?,objective-c,xcode,cocoa-touch,Objective C,Xcode,Cocoa Touch,我正在尝试实现一个循环来更改按钮和标签的标题(切换语言) 我的代码是: - (void)labelToggle { self.label.text = @" "; text = textValue[self.idx]; self.idx++; [button setTitle:text forState:UIControlStateNormal]; self.label.text = textValue[self.idx]; dispatch_a

我正在尝试实现一个循环来更改按钮和标签的标题(切换语言)

我的代码是:

- (void)labelToggle
{
    self.label.text = @" ";
    text = textValue[self.idx]; 
    self.idx++;
    [button setTitle:text forState:UIControlStateNormal];
    self.label.text = textValue[self.idx];
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(4 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        [self labelToggle];

    });
}
更新

在ViewDidLoad中调用循环,如下所示:

textValue= [[NSArray alloc] initWithObjects:@"Add", @"Προσθέστε", nil];
 self.idx = 0;
[self labelToggle];
idx设置在此处:

- (void)setIdx:(NSInteger)idx
{
    _idx = MAX(0, MIN(idx, idx % [textValue count]));
}
当ViewController关闭时,如何停止循环


谢谢

这里使用的是递归,因此很可能进入无限循环。实现您所尝试的最好方法是使用NSTimer,它每X时间调用一个选择器。像这样:

声明计时器iVar:

NSTimer *timer;
在viewDidLoad上启动它

timer = [NSTimer scheduledTimerWithTimeInterval:4 target:self selector:@selector(labelToggle) userInfo:nil repeats:YES];
如果要停止切换,请调用:

[timer invalidate];
timer = nil;
若要在解除视图控制器时停止,这取决于解除视图控制器的方式,请尝试
viewwilldemouse:
viewdidemouse:
,或者如果视图控制器是一个模式,您将调用:

    [self dismissViewControllerAnimated:YES completion:^{
        [timer invalidate];
        timer = nil;
    }];

希望有帮助。

它在ViewDidLoad中调用,没有显示循环。谢谢Dan。太好了。