为什么UIAlertView会阻止我的模态视图控制器显示?

时间:2012-12-13 10:37:17

标签: objective-c ios modal-dialog alert presentmodalviewcontroller

假设当用户按下按钮时需要显示消息,然后显示模态视图控制器。 我会写类似的东西:

- (void)pickImageButtonPressed:(id)button {

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Alert"
                                                    message:@"Some alert"
                                                   delegate:nil
                                          cancelButtonTitle:@"OK"
                                          otherButtonTitles:nil];
    [alert show];
    [alert release];

    UIImagePickerController *picker = [[UIImagePickerController alloc] init];
    picker.delegate = self;
    picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
    [[UIApplication sharedApplication].keyWindow.rootViewController
     presentModalViewController:picker animated:YES];
    [picker release];
}

使用此代码,模态视图控制器根本不显示

但是,如果我切换代码的​​两个块(首先显示模态,然后显示警告),视图控制器将以模态显示,并且警报会显示在其上方,完全符合我的要求。

我的问题是:为什么警报会阻止显示模态视图控制器?

请注意,在调用 presentModalViewController 之前,我不想等待警报被解雇。


更新 我发现我的生产代码比我最初提出的要复杂一些。我更新了示例代码,最后找到了一个简单的示例来重现问题。

请注意,在我的生产代码中,弹出窗口显示的地方是我没有任何对视图控制器的引用,这就是为什么我使用 [UIApplication sharedApplication] .keyWindow.rootViewController而不是直接引用到视图控制器

1 个答案:

答案 0 :(得分:0)

我终于找到了答案。问题确实存在于这一行:

[[UIApplication sharedApplication].keyWindow.rootViewController
 presentModalViewController:picker animated:YES];

当显示警报时,[UIApplication sharedApplication] .keyWindow.rootViewController 为零!。这就是选择器从未显示的原因。这就是为什么当我切换两个街区时它起作用了。

现在我需要找到一种方法来让最相关的视图控制器以模态方式呈现选择器...