我正在使用界面构建器,现在为了完成我在xcode中的第一个应用程序,我有一个问题,我没有找到解决方案:如何在按下UIButton的同时通过迭代增加int值?
我已经尝试了很多解决方案但是我已经尝试了最好的迭代是无限的,例如我有两种方法(内部触摸和触摸下调)更改bool值(如果下降bool = true并执行迭代;如果它是bool = false并停止迭代)。
在控制台中打印我有无限的结果:“DOWN,TRUE”
那么,我该怎么做呢?
非常感谢。
答案 0 :(得分:0)
最有可能发生的事情是你的循环在UI线程上运行。这意味着循环将使用UI线程,直到循环结束。循环完成的唯一方法是触发Touch Up Inside
方法。但是,此事件将在UI线程上创建,该线程当前正忙于循环。
您需要使用后台线程来增加int值并打印到控制台。这样,当Touch down
事件被触发时,循环将被推送到后台,UI线程可以继续处理将来的触摸事件。
一个很好的资源是Apple开发者网站上的Thread management文档:
不用担心并发编程,这里有一个简单的例子可以解决。
int i = 0;
bool cancelLoop = NO;
- (IBAction)touchDown:(id)sender {
// Run in background so that the UI thread can continue to process touch events.
[self performSelectorInBackground:@selector(startLoop) withObject:nil];
}
- (IBAction)touchUpInside:(id)sender {
[self cancelLoop];
}
- (void)startLoop {
cancelLoop = NO;
while(!cancelLoop) {
NSLog(@"%d", i++);
}
}
- (void)cancelLoop {
cancelLoop = YES;
}
答案 1 :(得分:0)
如果您有操作方法,那么只需声明实例变量即可
@property(assign)NSUInteger i;
现在将动作方法连接到UIButton,当它点击时,只需在动作方法中迭代你的i变量,如下所示: -
_i++;