iPad:显示模式视图,我的parentViewController现在为零?

iPad:显示模式视图,我的parentViewController现在为零?,ipad,presentmodalviewcontroller,parentviewcontroller,Ipad,Presentmodalviewcontroller,Parentviewcontroller,我有两个模态视图,它们工作得“很好”,现在不再返回父视图控制器,“代码没有改变。”——经典问题描述 我调试了模态视图解除,父视图控制器为nil,这解释了问题,但不是原因。我确实将SDK从4.1.2升级到了4.2,这样我就可以开始使用iOS 5了。我怀疑新的内存管理ARC和我的自动释放与保留/释放的风格 以下是从我的rootview控制器到AboutViewController的代码: - (IBAction)doInfo:(id)sender { NSLog(@"%s", __FUNCT

我有两个模态视图,它们工作得“很好”,现在不再返回父视图控制器,“代码没有改变。”——经典问题描述

我调试了模态视图解除,父视图控制器为nil,这解释了问题,但不是原因。我确实将SDK从4.1.2升级到了4.2,这样我就可以开始使用iOS 5了。我怀疑新的内存管理ARC和我的自动释放与保留/释放的风格

以下是从我的rootview控制器到AboutViewController的代码:

- (IBAction)doInfo:(id)sender {
    NSLog(@"%s", __FUNCTION__);
    AboutViewController *aboutViewController = [[[AboutViewController alloc] initWithNibName:@"AboutViewController" bundle:[NSBundle mainBundle]] autorelease];
    if (aboutViewController) {
        aboutViewController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
        aboutViewController.hidesBottomBarWhenPushed = YES;
        self.navigationController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
        self.navigationController.navigationBarHidden = YES;
        [self presentModalViewController:aboutViewController animated:YES];
    }
}
以下是在按下“完成”按钮后,AboutViewController中的Disclose返回到其父级

好的。。。我通过如下更改来修复。现在的问题是,为什么以前这样做

- (IBAction)doDone:(id)sender {
    NSLog(@"%s", __FUNCTION__);
    [self dismissModalViewControllerAnimated:YES];
}

引用[1]中有关属性的内容
parentViewController

在iOS 5.0之前,如果一个视图没有父视图控制器并且以模式显示,则会返回显示它的视图控制器。现在已经不是这样了。您可以使用presentingViewController属性获取演示视图控制器

因此,这就解决了为什么这在以前有效,但现在不再有效的问题。如果为iOS 5构建,我将使用
presentingViewController
属性,正如文档建议的那样,让父视图控制器(或在本例中显示)关闭模式视图。但是,如果构建iOS4和iOS5,我会让您的代码就位,因为它会将调用转发到适当的视图控制器

如果在任何情况下,该应用程序在重新编译之前在iOS 5上运行得完美无缺,我会认为苹果在运行时使用了一些技巧,模仿了iOS 5之前编译的应用程序的旧行为


[1]

我构建了一个类别,在iOS 4上添加了
presentingViewController

它在iOS 5上禁用自己

您可以无缝地使用它。请看


我希望这对你和我都有好处;它使你的代码更干净

仅供参考-我在带iOS4的iPad(目标5.0除外)、带iOS5的iPad和模拟器5.0上使用我的代码测试了目标4.1、4.2、4.3和5.0的排列。它确认了您在文档中找到的描述。iOS 4代码因presentingViewController为“未找到”而崩溃
- (IBAction)doDone:(id)sender {
    NSLog(@"%s", __FUNCTION__);
    [self dismissModalViewControllerAnimated:YES];
}