Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone UIAlertViewDelegate方法didDismissWithButtonIndex在手机处于睡眠/锁定状态时被调用_Iphone_Cocoa Touch - Fatal编程技术网

Iphone UIAlertViewDelegate方法didDismissWithButtonIndex在手机处于睡眠/锁定状态时被调用

Iphone UIAlertViewDelegate方法didDismissWithButtonIndex在手机处于睡眠/锁定状态时被调用,iphone,cocoa-touch,Iphone,Cocoa Touch,我有一个UIAlertView,它的didDismissWithButtonIndex委托方法调用弹出视图控制器(同一个类,它是alertview委托和viewcontroller),将用户返回到上一个屏幕。问题是当你在[警报显示]前锁定手机时;调用时,手机锁定时,有东西正在调用didDismissWithButtonIndex。由于对此的响应是弹出视图控制器,视图控制器释放并解除锁定它,因此我在回调时崩溃 是什么导致这个幻影按钮按下?看起来像是一个框架错误,但我不喜欢仓促下结论。我肯定没有点击

我有一个UIAlertView,它的didDismissWithButtonIndex委托方法调用弹出视图控制器(同一个类,它是alertview委托和viewcontroller),将用户返回到上一个屏幕。问题是当你在[警报显示]前锁定手机时;调用时,手机锁定时,有东西正在调用didDismissWithButtonIndex。由于对此的响应是弹出视图控制器,视图控制器释放并解除锁定它,因此我在回调时崩溃

是什么导致这个幻影按钮按下?看起来像是一个框架错误,但我不喜欢仓促下结论。我肯定没有点击按钮,因为我在代码显示之前点击了一个断点。然后我锁上电话。然后我继续。我看到它完成了显示,返回到事件循环,然后,当手机仍然锁定时,在didDismissWithButtonIndex中点击我的断点。互联网/论坛上也有一些关于类似虚假代表电话的帖子,但没有具体的答案

这是在模拟器和设备上,包括OS 2.2和OS 3.0。我想我错过了什么,但是什么

更新:是的,我创建了一个只有两个视图控制器的简单项目,当第二个视图控制器显示时,它创建并显示警报。然后我登录到委派方法,当手机被锁定时,它会在锁定时触发一次,然后在解锁并单击按钮时再次触发……2条日志消息。但如果没有锁,只有一个

我想我会提出一个问题,但似乎很明显,在没有人抱怨的情况下存活了这么长时间当willResignActive/didBecomeActive通知到达时,我将尝试通过设置isActive标志值来解决这个问题,如果应用程序未处于活动状态,则跳过代理主体

更新我在7月份发布了这篇文章,并为这期文章创建了雷达7097363。没有回应

实践中的解决方法非常有效,在处理代理时检查活动状态,如果应用程序处于非活动状态,则跳过该操作。

Rob


您是否能够在一个最小的项目中复制该问题,例如一个导航控制器和两个视图控制器,其中第二个(从第一个推到导航堆栈上)包含UIAlertView和委托。似乎如果它发生在那里,那么它很可能是一个bug,否则,它就是您的代码

我遇到了完全相同的问题

当设备被锁定时,总是在按钮索引值设置为0的情况下调用alertView委托方法didDismissWithButtonIndex(该值独立于cancelButtonIndex的值)


当按钮索引为0时,我通过在委托方法中不做任何操作来解决这个问题。这在您的代码中可能是不可能的。

这里有类似的问题:我的问题与手机被锁定无关,但我偶尔会接到一个额外的“DidDisclose”电话,按钮索引为0,而警报实际上仍在显示

我敢肯定,我使用UIAlertView的方式不正确,我无法弄清楚(线程问题,或者在关闭其他modalViewController后重新加载视图之前显示警报,或者…?)

作为一种变通方法,我将此语句放在了“diddesmisse”方法的顶部,它是有效的(我怀疑它不会与“willdismisse”一起工作,原因很明显):


作为一种更简单的解决方法,只有didDismissWithButtonIndex以这种方式调用。在锁定情况下,不会调用ClickedButtonIndex和willDismissWithButtonIndex

在正常的流程中,你会得到一个“ClickedButtonIndex”,然后是“willDismissWithButtonIndex”,最后是“didDismissWithButtonIndex”。当手机被锁定时,你只会得到“didDismissWithButtonIndex”。因此,如果你使用另外两个选项中的一个而不是“didDismissWithButtonIndex”,你就不会在锁定过程中被打扰

- (void) alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex
{

    if (alertView.superview != nil)
    {
        // alert is still in some superview, so this is a false call to didDismiss
        return;
    }

    // the rest of your code

}