2013-05-14 3 views
2

Мне нужно, чтобы мой AppDelegate мог получить указатель на мой текущий отображаемый контроллер представлений (исследовали visibleViewController для навигации, но более общая версия была бы лучше) и прочитала состояние из экземпляров объектов для использования в applicationWillResignActive.Доступ к контроллеру верхнего уровня из делегата приложения

Моя попытка в этом заключалась в том, что я инициализировал новые объекты, и они просто пусты. Мне нужно состояние объекта в любой момент времени выполнения.

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

Я знаю, что я, вероятно, игнорирую очевидное, но я должен формулировать свой поиск неправильно, потому что я не могу получить ясность. Я искал Stack Overflow в течение 10 минут и просмотрел контроллер вида и appdelegate docs.

Как получить доступ к значениям свойств объекта во время выполнения из делегата приложения?

+0

Возможный дубликат [Не удалось получить текущий ViewController внутри приложенияWillResignActive] (http://stackoverflow.com/questions/13409882/not-able-to-get-current-viewcontroller-inside-applicationwillresignactive) Здесь нет никаких трюков. Вы создаете объект «в области видимости» для другого объекта, передавая второй указатель (через свойство) в первый. –

ответ

2

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

Вместо этого вы должны подумать о том, что соответствующие контроллеры обзора соблюдают уведомление UIApplicationWillResignActiveNotification, и каждый из них выполняет собственное хранение своего собственного состояния. Когда приложение снова открывается, AppDelegate просто восстанавливает контроллер корневого представления, корневой VC затем проверяет, нужно ли ему что-либо восстанавливать и продолжать в цепочке, пока все данные не будут восстановлены. Это сохраняет модульную и изолированную логику и хранилище данных.

Если вы действительно:

нужно состояние объекта в любой момент времени выполнения

Тогда у вас есть другая проблема дизайна, и вы должны ломать вещи вниз. AppDelegate должен использоваться для конкретных задач, он должен играть роль в applicationWillResignActive, но эта роль не должна заключаться в том, чтобы управлять 100% работы, которая должна быть выполнена.

+0

Wain, когда вы говорите, что контроллеры представлений должны «наблюдать», специально указывают на использование KVO? – user

+1

UIApplicationWillResignActiveNotification - уведомление, отправленное NSNotificationCenter. Контроллер представления может добавлять себя в качестве наблюдателя. Это не КВО. – Wain

Смежные вопросы