2

我编写了一个自定义视图控制器容器,它可以用新的视图控制器(VC2)替换现有的视图控制器(VC1),即替换类型segue 而不是pop/push。

在使用 iOS 8 进行测试之前一切正常。如果在前一个视图控制器解除分配之前替换视图控制器,我使用的第二方似乎会导致崩溃

即如果 [VC2 viewDidLoad] 在 [VC1 dealloc] 之前调用。

我的理解是我无法控制 dealloc,所以这种行为是我无法控制的。但是,我想确保我不会以控制子视图控制器的方式导致这种行为。

以下是我的视图控制器容器的伪代码:

- (void)replaceStackWithNewController:(UIViewController*)newVC {

for(UIViewController *vc in [self viewControllers]) {
  [vc willMoveToParentViewController:nil];
  if([vc isViewLoaded]
     [[vc view] removeFromSuperview];
  }
  [vc removeFromParentViewController];
}
//self.viewControllers is my navigation stack
self.viewControllers = nil;
self.childVC = nil;

if(newVC != nil) {
  self.childVC = newVC;
}

[self addChildViewController:newVC];
//this adds the view to a pre existing wrapper
[self addView:newVC.view ToWrapper:wrapper];
//add controller to stack
[self.viewControllers addObject:newVC];
[newVC didMoveToParentViewController:self];

}
4

0 回答 0