В попытке выяснить, почему viewWillAppear не вызывался в моем приложении, я столкнулся с тем, что может быть грубым недоразумением, которое я придерживаюсь предполагаемого использования подклассов UIViewController.
В соответствии со следующим сообщением viewWillAppear не запускается при использовании addSubView! и ссылки на это сообщение в блоге: http://blog.carbonfive.com/2011/03/09/abusing-uiviewcontrollers/ Подклассы UIViewController должны выполняться только в очень специфических ситуациях. Наиболее заметно, когда они добавляются непосредственно в UIWindow или другие пользовательские контроллеры Apple, такие как UINavigationControllers.
Я, конечно, виноват в добавлении представлений подклассов UIViewController к представлениям других подклассов UIViewController.
На самом деле, я думал, что это была более или менее полная идея реализации Apple MVC в целом... Один общий VC, с другими VC внизу, все с радостью получили свои методы делегирования.
Если в приложении, представленном в этой статье, есть много представлений (которые по определению нуждаются в контроле), и множество экранов, каждая модель должна иметь один главный подкласс VC, со всеми подзонами вместо этого управляются пользовательскими контроллерами (которые управляют представлениями), которые являются подклассами простого NSObject.
В этом случае UIViewControllers должен быть только непосредственно в Window или UINavigationController, UITabBarController и т.д.?
Вы гарантированно получаете в этом случае методы делегатов UIVC? Как это отличается от вызова методов делегата вручную, когда представление viewcontroller является подчиненным другим VC?
Честно говоря, это кажется огромной тратой времени. Пользовательские реализации ViewDidLoad, viewDidLoad, viewDidUnload, viewWillAppear, viewWillDisappear, не говоря уже о таких простых вещах, как свойства, например, "просмотр"...
Так что, в принципе, я был совершенно неправ, или я нахожусь на дикой гусиной погоне. Если подклассы UIViewController не могут рассчитывать на вызов viewWillAppear, почему бы просто не вызвать этот метод вручную и не сделать с ним?
Зачем копировать все воспринимаемые функции UIViewController?