Выпуск ViewControllers, связанных с UITabBarController с ARC

Я работаю в приложении, где у меня ниже вид структуры

-UINavigationController (MAIN NAVIGATION CONTROLLER)
--UIViewController
---UITabBarController
     -- UINavigationController1
     ---- UITableViewController1

     -- UINavigationController2
     ---- UITableViewController2

     -- UIViewController ( Logout Button is in this Controller )

Теперь я вызываю ниже метод для выхода пользователя на первый ViewController

[self.navigationController popToRootViewControllerAnimated:YES];

Здесь self.navigationController = (главный навигационный контроллер)

но этот код не работает, он не деинит ниже контроллеры.

-- UINavigationController1
---- UITableViewController1

-- UINavigationController2
---- UITableViewController2

Я использую ARC, поэтому я не могу вызвать метод выпуска для всех контроллеров, так как я могу этого достичь.

ОБНОВЛЕНИЕ

Вот мой push код:

//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];
}
}

2 ответа

  1. Что почти наверняка происходит здесь, так это то, что у вас есть сильный ссылочный цикл; два (или более) объекта, каждый из которых содержит сильные ссылки на другой(ы) в цикле, так что ни один из них не может быть удален. Например, есть ли у UITabBarController сильная ссылка на его заключительное представление? Если это так, сделайте по крайней мере одну из ссылок слабой, чтобы разорвать цикл.

    Если не видно, какие объекты могут циклически ссылаться друг на друга , вы можете использовать инструменты, чтобы попытаться найти их; здесь есть отличный учебник, раздел «сильные ссылочные циклы», обсуждающий в значительной степени именно этот вид проблемы.

  2. Как корень UIViewControllerпредставляет UITabBarController? Ребенок / родитель? Если это так, похоже, что первый UIViewControllerконтроллер вида все еще содержит ссылку на UITabBarController. На диаграмме это выглядит так , как будто начальная UINavigationControllerимеет только один толчокUIViewController, корневой.