iPad:呈现模态视图,我的parentViewController现在为零?

mob*_*bob 2 parentviewcontroller ipad presentmodalviewcontroller

我有几个模态视图一直工作"很好",现在停止返回到父视图控制器,"代码没有改变." - 经典问题描述.

我调试了模态视图解除,父视图控制器是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];
    }
}
Run Code Online (Sandbox Code Playgroud)

以下是在按下"完成"按钮后将AboutViewController中的消除回到其父节点.

- (IBAction)doDone:(id)sender {
    NSLog(@"%s", __FUNCTION__);
    [[self parentViewController] dismissModalViewControllerAnimated:YES];
}
Run Code Online (Sandbox Code Playgroud)

好的......我修改如下修改.现在的问题是为什么以前这项工作?

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

Den*_*cht 6

引用[1]关于财产parentViewController:

在iOS 5.0之前,如果视图没有父视图控制器并且以模态方式呈现,则将返回呈现它的视图控制器.这已不再是这种情况.您可以使用presentViewController属性获取呈现视图控制器.

所以这解决了之前为什么这样做而不再有效的问题.如果为iOS 5构建,我将使用该presentingViewController属性,因为文档建议让父视图控制器(或在本例中呈现)忽略模态视图.但是,如果为iOS 4和5构建,我会让你的代码到位,因为它无论如何都会将调用转发给相应的视图控制器.

如果在任何情况下应用程序在重新编译之前在iOS 5上完美运行,我会假设Apple放置了一些运行时技巧,模仿iOS5之前编译的应用程序的旧行为.

[1] http://developer.apple.com/library/ios/#documentation/uikit/reference/UIViewController_Class/Reference/Reference.html