Можно ли вызывать веб-сервис в App Delegate? - PullRequest
1 голос
/ 15 сентября 2011

У меня тут небольшая дилемма.У меня есть приложение, которое имеет UINavigationViewController в качестве rootViewController.Насколько я могу сказать, UINavigationViewController требует rootViewController при создании экземпляра.Проблема в том, что у меня есть несколько UIViewControllers на выбор, и выбор зависит от данных, возвращаемых веб-службой.

Означает ли это, что я должен вызывать веб-службу в AppDelegate и создавать экземпляр UINavigationViewController только после получения данных??

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

Есть ли лучший способ сделать это?Спасибо!

ОБНОВЛЕНИЕ : Мой коллега порекомендовал другое решение, которое могло бы быть самым чистым.Здесь AppDelegate загружает загрузочный ViewController, основной целью которого является получение данных из веб-сервиса и, возможно, отображение индикатора загрузки.Как только он получает данные, он удаляет себя и добавляет контроллер навигации с соответствующим корнем.

Ответы [ 3 ]

2 голосов
/ 15 сентября 2011

может выдвинуть viewcontroller с представлением «в ожидании данных ...», а затем, когда появится веб-ответ, выдвинуть его и нажать соответствующий viewcontroller?

0 голосов
/ 16 сентября 2011

UINavigationController имеет свойство под названием viewControllers, которое можно установить. Смотри http://developer.apple.com/library/ios/DOCUMENTATION/UIKit/Reference/UINavigationController_Class/Reference/Reference.html#//apple_ref/occ/instp/UINavigationController/viewControllers.

// after your web service returns
navigationController.viewControllers = [NSArray arrayWithObject:yourNewController];

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

0 голосов
/ 15 сентября 2011

Вызов веб-службы может занять некоторое время.Очень плохая идея - заморозить пользовательский интерфейс, пока в Интернете не торопится отвечать.Загрузите контроллер представления (и представление) с вращающимся колесом и уведомлением «Пожалуйста, подождите ...», инициируйте сервисный вызов, а затем, как только сервис ответит, замените его реальным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...