Сброс UIViewController в UITabBarViewController при выходе приложения из системы

#iphone #objective-c #ipad

#iPhone #objective-c #iPad

Вопрос:

У меня есть UITabBarController с тремя вкладками, каждая из которых является UIViewController с UITableView. У меня есть кнопка выхода, и я хочу очистить UITableView во всех этих UIViewController, поэтому с одного из UIViewController я сделал:

 NSArray * viewControllers = ((UITabBarController *)self.parentViewController).viewControllers;
AllGroupsViewController * agvc = [viewControllers objectAtIndex:1];
[agvc.groups removeAllObjects];
[agvc.table reloadData];
SearchViewController * svc = [viewControllers objectAtIndex:2];
[svc.results removeAllObjects];
[svc.table reloadData];
  

Однако, похоже, что NSArray ViewControllers пуст. Есть ли другой способ сбросить все снова при выходе из системы?

Проблема с моим текущим приложением заключается в том, что когда у меня есть пользователь, который вошел в систему и использует приложение. Он выходит из системы, и новый пользователь входит в систему, этот новый пользователь все еще может видеть историю предыдущих пользователей в UITableView.. вот почему я хочу очистить это при выходе пользователя из системы через три UIViewController в UITabBarController

Ответ №1:

Не могли бы вы проверить значение self.parentViewController? Я не уверен, возвращает ли он контроллер панели вкладок.

Вместо self.parentViewController.ViewControllers выполните

 self.tabBarController.viewControllers
  

Комментарии:

1. Я думаю, это должно сработать .. теперь проблема в том, что три UIViewController на панели вкладок находятся внутри UINavigationController.. итак, как мне получить доступ к UIViewController UINavigationController

2. UINavigationController имеет два свойства, которые могут вам помочь. RootViewController и visibleViewController. visibleViewController выдаст вам тот, который отображается на экране, а RootViewController — самый нижний. Вот ссылка на документацию UINavigationController. developer.apple.com/library/ios/#documentation/uikit/reference /…

3. проверьте, указав этот [tabBarViewController isKindOfClass:[Класс UINavigationController]]

Ответ №2:

Определите этот массив в AppDelegate и во время запуска приложения создайте TabController с табличным представлением с помощью кода.

Теперь с помощью кнопки выхода установите для списка данных или источника tableview значение nil;

Комментарии:

1. при выходе из системы я просто представляю modalView страницы входа.. Я не уверен, как это может быть выполнено в делегате приложения

2. Знаете ли вы, как реализовать методы делегирования? Вы можете определить метод делегирования в вашем LoginViewController и реализовать в вашем корневом контроллере просмотра, который после выполнения вызовов выхода из системы до отображения loginscreen очищает источник данных табличного представления до нуля;

3. Да, у меня действительно есть несколько делегатов.. Изначально я собирался использовать этот метод. но поскольку кнопка выхода фактически отображается с одного из UIViewController, который находится в UITabBarController, поэтому делегат отправляется туда вместо RootViewController

4. Вы можете определить метод в делегате приложения, такой как ClearContents, и, получив доступ к AppDelegate, вы можете вызвать этот метод с помощью любой кнопки нажатия.