当同时按下两个按钮时,此方法会导致崩溃: - (void)buttonPressed:(UIButton *)按钮什么错误?

时间:2011-07-20 11:08:31

标签: iphone ios sdk uibutton

我的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按钮,否则它会崩溃。

如何消除这种情况? 非常感谢:)

5 个答案:

答案 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。