wait_fences:未能收到回复:10004003错误 - UIAlert没有UITextField存在

时间:2010-11-22 02:58:43

标签: iphone uialertview

我正在开发一个应用程序,当用户第一次开始使用UIAlert询问他们是否想要使用他们当前的位置时,会弹出一个UIAlert。这发生在主控制器内。但是,使用UIAlert时出现以下错误:

wait_fences: failed to receive reply: 10004003

我调试了它,然后用Google搜索。我没有使用textarea或键盘输入,所以我不必辞职第一响应者。但是,我仍然无法弄清楚为什么我会收到此错误。它只在我添加UIAlert时出现。

MainController.m

- (void)viewDidLoad {

    UIAlertView *mainAlert = [[UIAlertView alloc]
                      initWithTitle:@"Location" 
                      message:@"Do you wish to use your current location?" 
                      delegate:self 
                      cancelButtonTitle:nil 
                      otherButtonTitles:@"No Thanks", @"Sure!", nil];

    [mainAlert show];
    [mainAlert release];

    [super viewDidLoad];
}

头文件的构造如下:

@interface MainController : UIViewController 
<CLLocationManagerDelegate,
 MKReverseGeocoderDelegate, UIAlertViewDelegate>

5 个答案:

答案 0 :(得分:17)

这个wait_fences: failed to receive reply:的原因也可能是你试图在mainThread(这是GUI线程)时显示警告。

调度到GUI线程有助于:

dispatch_async(dispatch_get_main_queue(), ^{ 
  [mainAlert show];
});

答案 1 :(得分:8)

我通过向UIAlert添加一点延迟解决了这个问题:下面是我的 ViewDidLoad 方法(它在 ViewDidAppear 中也可以正常工作):

[self performSelector:@selector(testAlert) withObject:nil afterDelay:0.1];

由于某种原因,延迟成功了。然后我调用了另一种方法(我当然会重命名它)。

- (void) testAlert
{
    UIAlertView *mainAlert = [[UIAlertView alloc] initWithTitle:@"Location" message:@"Do you wish to use your current location?" delegate:self cancelButtonTitle:nil otherButtonTitles:@"No Thanks", @"Sure!", nil];

    [mainAlert show];
    [mainAlert release];
}

答案 2 :(得分:1)

在执行任何其他操作之前,请务必致电[super viewDidLoad];。这也解释了延迟的原因。

希望我是对的。 :)

答案 3 :(得分:0)

尝试在-viewDidAppear:(BOOL)动画中显示UIAlert。 -viewDidLoad在加载视图时调用,但在屏幕之前调用。

答案 4 :(得分:0)

我有类似的问题。我在ViewDidLoad中添加了一个观察者,用于获取可达性通知,该通知在ViewDidAppear完成之前发布。

所以ViewController试图在完全绘制自己的View之前显示一个UIAlertView。

我将观察者添加到ViewDidAppear,并在ViewDidAppear中启动了可达性的startNotifier。此外,代码中错过了对[super viewDidAppear]的调用。这两个问题都得到纠正,应用程序再次正常运行。

如果你得到这个wait_fences:没有收到回复:10004003错误一次,你可能无法在应用程序中进一步呈现任何模态ViewControllers。这是我在我的应用程序中遇到的问题。有时,当尝试呈现一个模态ViewController时,应用程序将进入无限循环。

正如艾伦所说,永远记得“尝试在-viewDidAppear:(BOOL)动画中显示UIAlert。-viewDidLoad在加载视图时被调用,但在屏幕上显示之前。”