Для ситуаций входа в систему, выхода из системы и входа в систему, когда все виды вещей должны сбрасываться самостоятельно при выходе из системы или при следующем входе в систему, мне нравится создавать уведомления, что-то вроде «NewUserReset». Все, что нужно для сброса себя в исходное состояние, прослушивает уведомление и запускает метод, который выполняет любой вид сброса, в котором он нуждается. Панель вкладок изменит название кнопки на выход из системы, временные структуры данных nil / zero / release сами и т. Д.
Он прекрасно отделяет выход из всех действий, которые необходимо выполнить, поэтому вы не пытаетесь манипулировать контроллерами представления и хранилищем данных, а также просматривать представления с контроллера, получившего касание выхода из системы.
Отправка уведомления очень проста. Когда пользователь нажимает кнопку «Выйти», вы отправляете уведомление следующим образом:
[[NSNotificationCenter defaultCenter] postNotificationName:@"JMUserLogout"
object:nil];
Вам не нужно называть это JMUserLogout, вам просто нужна строка, которую вы узнаете, и что-то - я использовал ваши инициалы - чтобы гарантировать, что вы случайно не отправите уведомление с тем же именем, что и уведомление, о котором вы не слышали.
Когда это уведомление исчезнет, любой объект, зарегистрированный в defaultCenter для прослушивания @ "JMUserLogout", будет выполнять любые действия, которые вы выберете. Вот как регистрируется ваш объект (он должен находиться в каком-то месте, например, в ViewWillLoad или в методе инициализации объекта):
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(resetForNewUser:)
name:@"JMUserLogout"
object:nil];
Селектор там, resetForNewUser:, это просто имя метода, который вы хотите запустить, когда уведомление исчезнет. Этот метод выглядит так:
- (void)resetForNewUser:(NSNotification *)notif {
// DO SOMETHING HERE
}
Там, где написано // ЧТО-ТО ЗДЕСЬ, вы добавите код, специфичный для вашего приложения. Например, вы можете добавить панель вкладок в качестве наблюдателя уведомления JMUserLogout. В методе resetForNewUser: вы бы изменили имя кнопки выхода на «Вход».
В ViewController или View или хранилище данных, в котором хранятся старые данные предыдущего пользователя, метод resetForNewUser удалит все эти данные и вернет их так, как они должны быть для нового пользователя. Например, если предыдущий пользователь ввел данные в UITextField, вы удалили бы текст, yourTextFieldName.text = @ "";
Наконец, важно также удалить свой объект в качестве наблюдателя, прежде чем он будет освобожден. В вашем методе Dealloc для каждого объекта, который зарегистрировался для получения уведомления, вы добавляете следующее:
[[NSNotificationCenter defaultCenter] removeObserver:self];
Надеюсь, это имеет смысл. Документация Apple для NSNotificationCenter объясняет больше и предоставляет несколько примеров приложений, использующих уведомления.