我正在使用以下代码将子视图控制器添加到我的主视图控制器:
HPSPhotoLibraryOverlayController* controller = [[HPSPhotoLibraryOverlayController alloc] init];
[self.view addSubview:controller.view];
[self addChildViewController:controller];
[controller didMoveToParentViewController:self];
子视图控制器正在控制的视图包含一个按钮,当点击该按钮时,应从主视图控制器中删除子视图和子视图控制器。
按下按钮时运行的子视图控制器中的方法如下所示:
-(void)photoLibraryCloseButtonTapped:(id)sender
{
[self.view removeFromSuperview];
[(HPSFormController*)_parentController photoLibraryRequestingClose];
}
然后主视图控制器中将关闭子视图控制器的方法如下所示:
-(void)photoLibraryRequestingClose
{
UIViewController* controllerToRemove;
for (UIViewController* controller in self.childViewControllers) {
if ([controller isKindOfClass:[HPSPhotoLibraryOverlayController class]])
{
[controller removeFromParentViewController];
controllerToRemove = controller;
}
}
if (controllerToRemove)
{
controllerToRemove = nil;
}
}
这段代码一切正常。但是,在我看来,子视图控制器被设置为零,而子视图控制器的 -(void)photoLibraryCloseButtonTapped:(id)sender 方法仍在运行(即 -(void)photoLibraryRequestingClose 方法尚未返回,但是我正在取消调用 photoLibraryRequestingClose 的子视图控制器。
我正在使用 ARC。
为什么这行得通,我是否应该以不同的方式管理子视图控制器的删除,记住触发子控制器删除的按钮是由子视图控制器管理的。
非常感谢。