Iphone 在iOS 5上以编程方式取消UIAlertView不会';t调用委托方法

Iphone 在iOS 5上以编程方式取消UIAlertView不会';t调用委托方法,iphone,ipad,uialertview,ios5,Iphone,Ipad,Uialertview,Ios5,我遇到了一个问题,十次中有九次,当我调用UIAlertView的dismissWithClickedButtonIndex:animated:时,委托方法alertView:willDismissWithButtonIndex:未被调用。还有其他人遇到这个问题吗?我即将向Apple提交一个bug,但我很好奇是否有其他人遇到过这个问题并找到了解决方法。UI对象的委托仅在用户执行操作时才被调用。苹果认为,当你从代码中做一些事情时,你已经知道自己在做什么,不需要别人通知你。这适用于所有委托(UIScr

我遇到了一个问题,十次中有九次,当我调用UIAlertView的dismissWithClickedButtonIndex:animated:时,委托方法alertView:willDismissWithButtonIndex:未被调用。还有其他人遇到这个问题吗?我即将向Apple提交一个bug,但我很好奇是否有其他人遇到过这个问题并找到了解决方法。

UI对象的委托仅在用户执行操作时才被调用。苹果认为,当你从代码中做一些事情时,你已经知道自己在做什么,不需要别人通知你。这适用于所有委托(UIScrollView的滚动委托方法与代码滚动、表视图操作等)

无论如何,应该使用什么按钮索引调用代理?。。当您以编程方式解除委托时,没有任何人要确保iOS4和IOS5中的行为一致,您可以在调用UIAlertView的dismissWithClickedButtonIndex:animated:method之前删除它的委托,然后手动调用委托方法。e、 g

- (void)somethingDidHappen {
    id<UIAlertViewDelegate> delegate = myAlertView.delegate;
    myAlertView.delegate = nil;
    // now, we know the delegate won't be called...
    [myAlertView dismissWithClickedButtonIndex:0 animated:NO];
    // ...so we call it ourselves below
    [delegate alertView:myAlertView clickedButtonAtIndex:0];
}
-(无效)发生了什么事{
id delegate=myAlertView.delegate;
myAlertView.delegate=nil;
//现在,我们知道代理不会被调用。。。
[myAlertView使用Clicked按钮解除索引:0动画:否];
//…所以我们称之为下面的我们自己
[代理警报视图:我的警报视图单击按钮索引:0];
}
(该代码没有经过测试,但你明白了。)

根据问题,调用的是不同的方法。然而,这并不能解释为什么你会接到不稳定的电话。在我测试的设备上,dismise方法被正确调用,因此我只将其重定向到click版本


如果你继续看到不稳定的行为,也许你应该向苹果公司提交一个bug。

警报视图:ClickedButtonIndex:
警报视图:didDismissWithButtonIndex:
警报视图:willDismissWithButtonIndex:
。您所引用的方法(
ClickedButtonIndex:
)仅在用户明确点击您的警报视图上的按钮时调用(因此“单击”)

通过
dismisswithclickedbutonindex:animated:
进行编程调用以解除警报似乎不会调用
alertView:clickedbutonindex:


因此,如果您需要在解除警报视图时始终触发某些行为,无论它是由用户点击按钮触发的还是通过编程触发的,那么使用
diddismisswithbuttonnindex:
willdismisswithbuttonnindex:
更有意义。

对,除此之外,这适用于大多数委托方法。根据苹果公司的文档,当您使用ClickedButtonIndex:animated:调用Dismiss时,您提供了一个用于代理的按钮索引。此外,这种行为只在iOS5上开始发生;在iOS 4及更高版本上,当您以编程方式关闭警报视图时,委托方法按预期工作。另一件令人恼火的事情是,有时它会工作,所以我不能只插入对我的alertView:diddismisswithbuttonnindex:method的调用,因为它会被调用两次。