我的UI中有两个按钮的方法,用于内部修饰。
-(void)buttonPressed:(UIButton *)button{
[yButton setEnabled:NO];
[iButton setEnabled:NO];
pismeno = (button.tag == BUTTON_TAG_Y) ? PismenoYpsilon : PismenoJota;
[self setNewValues];
}
除非我在同一时间同时按下BOTH按钮,否则一切正常。我尝试在内部修饰后禁用它们:
[yButton setEnabled:NO];
[iButton setEnabled:NO];
在我的setNewValues方法的末尾启用它们。如上所述,一切正常,除非同时按下BOTH按钮,否则它会崩溃。
如何消除这种情况? 非常感谢:)
答案 0 :(得分:13)
Martin,您可以将UIButton上的exclusiveTouch属性设置为YES。然后只会注册一个按钮。
在这里查看UIView类的独家触摸属性:http://developer.apple.com/library/ios/#documentation/uikit/reference/uiview_class/uiview/uiview.html
这有帮助吗?
答案 1 :(得分:2)
如果我们对崩溃有更多了解,可能会有所帮助吗?
如果没有它,很难正确诊断,看到CoreUI是单线程的,你不应该两次调用buttonPressed:同时它不会成为竞争条件。
答案 2 :(得分:0)
听起来像某种竞争条件
由于按下的按钮作为参数传递,你应该首先处理,然后是另一个按钮;也许还可以在它们周围放置一个@synchronized以获得良好的衡量标准 - 尽管这只是猜测。
答案 3 :(得分:0)
我不知道你的应用程序崩溃的原因,但我通常使用名为allowInput或类似的变量。
-(void)buttonPressed:(UIButton *)button{
if( allowInput == YES ) {
allowInput == NO;
[yButton setEnabled:NO];
[iButton setEnabled:NO];
pismeno = (button.tag == BUTTON_TAG_Y) ? PismenoYpsilon : PismenoJota;
[self setNewValues];
}
}
这总是阻止快速点按钮导致我的代码出现问题。
在setValues的末尾,将allowInput设置为YES。
如果使用调试器找不到它,也许这可以帮助您缩小原因。
答案 4 :(得分:0)
如果您还有问题,想要快速修复吗?只需要为每个按钮添加成员函数1,然后在函数关联的按钮上设置setEnabled。