我正在申请工作,我有以下种类的结构
-UINavigationController (MAIN NAVIGATION CONTROLLER)
--UIViewController
---UITabBarController
-- UINavigationController1
---- UITableViewController1
-- UINavigationController2
---- UITableViewController2
-- UIViewController ( Logout Button is in this Controller )
现在我调用以下方法将用户注销到First ViewController
[self.navigationController popToRootViewControllerAnimated:YES];
这里是self.navigationController =(MAIN NAVIGATION CONTROLLER)
但是这段代码不起作用,它不会在控制器下面。
-- UINavigationController1
---- UITableViewController1
-- UINavigationController2
---- UITableViewController2
我正在使用ARC,所以我不能为所有控制器调用release方法,所以我怎样才能实现这一点。
更新
这是我的推送代码:
//Property Declare in AppDelegate
@property (nonatomic,weak) UITabBarController *tabBarControllerRef;
// Below code Written in RootViewController of (MAIN NAVIGATION CONTROLLER)
-(void)moveToContentScreen {
AppDelegate *delegateRef = (AppDelegate *) [UIApplication sharedApplication].delegate;
delegateRef.tabBarControllerRef = [self.storyboard instantiateViewControllerWithIdentifier:@"tabbarReference"];
if (delegateRef.tabBarControllerRef) {
[self.navigationController pushViewController:delegateRef.tabBarControllerRef animated:YES];
}
}
答案 0 :(得分:0)
这里几乎可以肯定的是,你有一个强大的参考周期;两个(或更多)对象,每个对象都在一个循环中保存对其他对象的强引用,因此不能删除它们。例如,UITabBarController是否具有对其封闭视图的强引用?如果是这样,请至少使其中一个参考弱,以打破周期。
如果通过查看哪些对象可能周期性地相互引用而不明显,您可以使用Instruments来尝试找到它们;有an excellent tutorial here,"强参考周期"部分讨论了这种问题。
答案 1 :(得分:0)
根UIViewController
如何呈现UITabBarController
?父/子?如果是这样,看起来第一个UIViewController
视图控制器仍然保留对UITabBarController
的引用。在您的图表中,看起来初始UINavigationController
只有一个被推UIViewController
,根推。{/ p>