2013-06-25 3 views
0

У меня проблема.Почему iOS6 вызывает частный метод перед viewdidload?

Это, когда я начал контроллер, использовал метод initwithnib:bundle:, а затем, я думаю, этот контроллер был загружен в память. Поэтому я вызываю его метод selectUnreadMessage, чтобы изменить его заголовок. Но я обнаружил, что viewdidload был вызван после selectUnreadMessage.

Кто-нибудь может мне сказать, почему? Благодарю.

- (void)selectUnreadSegmentedHeaderButton { 

    if ([YDNetworkingManager sharedNetworkingManager].badgeNumbers.count) { 

     for (NSNumber *unreadMessagesCount in [YDNetworkingManager sharedNetworkingManager].badgeNumbers) { 
      if (unreadMessagesCount.intValue > 0) { 
       NSInteger index = [[YDNetworkingManager sharedNetworkingManager].badgeNumbers indexOfObject:unreadMessagesCount]; 
       self.segmentedHeader.selectedIndex = index; 
       [self loadTableViewAtIndex:index]; 
       break; 
      } 
     } 
    } 
} 

Код моего личного метода выше. Этот контроллер имеет свойство SegmentedHeader для переключения между различными типами сообщений.

Этот метод вызывается после контроллера, который использовал этот метод как addSubView;

+2

Нет, если вы не сможете объяснить себя лучше этого. Но имейте в виду, что представление создается по первой ссылке на него. Если selectUnreadMessage ссылается на представление, это вызовет его загрузку. –

+0

Но когда я вызвал initwithnib: bundle: method, я правильно ссылался на Controller? –

+0

initWithNib ссылается на контроллер, но не на представление. –

ответ

0

viewDidLoad метод вызывается, когда вид контроллера готов к addSubView в другой вид. И когда был добавлен вид контроллера, будут называться viewWillAppear и viewDidAppear. Если вид Controller удален из супервизора, то будут вызваны viewWillDisAppear и viewDidDisAppear.

И еще один вид контроллера добавлен, viewDidLoad будет NOT. Другие методы вызовут то же, что и я.

Это означает, что при инициализации контроллера viewDidLoad не был вызван немедленно. Этот метод будет называться позже. Это lazy-loading

Надеюсь, это полезно!

+0

Спасибо, но вы можете сказать мне, почему методы, которые я определил, можно вызвать перед ViewDidLoad? Итак, когда был вызван метод с именем «selectUnreadMessage», вызванный iOS для вызова ViewDidLoad? –

+0

Если вы не вызываете свой приватный метод, называется ли 'viewDidLoad'? 'viewDidLoad' вызывается только в том случае, если видимый вид вашего контроллера отображается. Не могли бы вы показать код своего частного метода? – VietHung

+0

ОК, я вставляю свой личный код метода выше. –

0

Инициализация ViewController не создает вид - представление viewcontroller загружается лениво - когда его представление фактически добавлено для просмотра иерархии. Таким образом, метод -viewDidLoad вызывается при доступе к объекту viewcontroller .view - таким образом, вы можете рассмотреть возможность инициализации структур данных в методе init (выборка данных, распределение контейнеров, настройка значений по умолчанию и т. Д.), А затем, когда вызывается -viewDidLoad, - примените вас данные к вашим представлениям/пользовательскому интерфейсу.