2013-09-02 4 views
10

Документов на viewControllerWithRestorationIdentifierPath:coder: говорят:Как может viewControllerWithRestorationIdentifierPath: coder: найти существующий экземпляр?

Ваша реализация этого метода необходимо создать (или найти) в соответствующего вида объект контроллера и вернуть его ... Это не всегда необходимо создать новый объект вида контроллера в вашем исполнении этого метода. Вы также можете вернуть существующий объект объекта , который был создан другим способом. Например, , если контроллер представления уже был загружен из файла раскадровки, , вы вернете этот объект, а не создадите новый. [Курс курсивом.]

Это всегда казалось полной бессмыслицей для меня. Это метод класса! У нас нет доступа к каким-либо экземплярам в данный момент - если мы не создадим их. Я был бы признателен, если кто-нибудь сможет объяснить мне, как метод класса может найти или узнать о «контроллере представлений, который уже был загружен из файла раскадровки».

EDIT: Чтобы получить награду вы должны показать мне реальный случай, с вашего собственного приложения, метода класса viewControllerWithRestorationIdentifierPath:coder: используется для «возвращает существующий объект вида контроллера, который был создан другим способом.»

ответ

2

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

Поскольку UIApplication в значительной степени одноточечный и имеет один делегат, это означает, что ваш делегат приложения имеет глобальное состояние, которое делает его доступным из любого места, в том числе в методах класса с помощью: [[UIApplication sharedApplication] delegate].

Конечно, любой одноплодный доступен из любой точки мира и общий шаблон (но один я лично не нравлюсь) должен иметь NavigationManager синглтон, который управляет любым глобальными переходами зрения контроллера, так что в этом случае вы сможете также доступ к существующим экземплярам.

+1

В реальной жизни, поскольку делегат приложения действительно, вероятно, тот, кто знает, какие контроллеры представлений уже были загружены из файла раскадровки, и как ссылаться на них по мере того, как восстанавливается механизм восстановления, кажется более вероятным, что я skip 'viewControllerWithRestorationIdentifierPath: coder:' и использовать приложение делегата приложения: viewControllerWithRestorationIdentifierPath: coder: '_instead_. И поскольку этот метод экземпляра _is_, это не проблема. Кажется, я не смог выявить каких-либо обстоятельств, когда этого не было бы. – matt

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