2012-06-02 3 views
1

При использовании вкладок с раскадровкой в ​​iOS 5 некоторые из них могут занять довольно много времени для инициализации при переключении на него (например, вкладка, содержащая GLKViewController).Как создать экземпляр определенного контроллера представления с раскадрой в iOS на ранней стадии загрузки?

Это происходит потому, что объем работы в режиме viewDidLoad в этом контроллере может быть очень большим.

Есть ли способ инициализировать определенный контроллер вида (и вызвать его метод viewDidLoad), определенный в раскадровке на ранней стадии - при запуске приложения? Сделав это, задержка должна быть устранена.

+0

Почему вы не инициализируете GLKViewController в делегате приложения, а затем переместите его в представление в viewDidLoad –

ответ

1

Вы уверены, что это экземпляр контроллера представления, а не метод viewDidLoad? Контроллеры представлений, вероятно, все созданы, когда раскадровка распакована, но контроллер просмотра пытается как можно дольше загружать свой фактический объект представления; viewDidLoad не вызывается до получения view объекта вашего подкласса UIViewController.

Так способ обойти это может быть вручную открыть свойство вида:

__unused CGRect frame = [[tabBarController.viewControllers objectAtIndex:index] view].frame; 

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

+1

. Мой плохой, это действительно метод viewDidLoad. И это прекрасно работает, спасибо. Сейчас обновит мой вопрос. – dmirkitanov

+0

Мой код выглядит следующим образом: UIViewController * v = [self.viewControllers objectAtIndex: index]; __unused CGRect frame = v.view.frame; У контроллеров нет свойства frame :) Еще раз спасибо. – dmirkitanov

+0

А, да, извините! Я уточню свой ответ. –

1

Вызов кадра vewcontroller или .view имущество, скорее всего, работать, , но я не советую вам портить с ViewController инициализаций и настроек просмотра

По следующим причинам

  • изменения, которые вы сделаете, не будут стандартными, это будут трюки и взломы, которые позже выйдут из-под контроля.
  • Изменения, которые вы делаете, не будут переноситься с вами в другие проекты, которые вы создаете.

Если я столкнулся с проблемой, как это я бы создать GLKViewController отдельно, например, в приложении делегата и держал ее там, до тех пор пока в viewDidLoad вызывается в ViewController, то я бы переместить этот initilized GLKViewController к ViewController

+0

Да, я понимаю, что это на самом деле «трюк», но очень удобно создавать представление в построителе интерфейса, а не делать это руками. Это приведет к значительному количеству кода. Желание есть официальный способ вызова этого метода viewDidLoad. – dmirkitanov

+0

Да, вы, вероятно, правы, я не считал, что вам нужно, чтобы это было от конструктора интерфейса, а не от кодирования, это решение может быть хорошим, хотя я все еще не убежден :) –

+0

В любом случае, спасибо за ваш ответ, потому что я согласитесь с вами, что делать такие трюки вообще не очень хорошо :) Но здесь он работает, и он работает хорошо. Если я найду другое «официальное» решение, я отправлю его. – dmirkitanov

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