可以在App Delegate中调用Web服务吗?

时间:2011-09-15 18:53:36

标签: iphone objective-c ios ipad

我这里有点困境。我有一个将UINavigationViewController作为rootViewController的应用程序。据我所知,UINavigationViewController在实例化时需要一个rootViewController。问题是,我有几个UIViewControllers可供选择,选择取决于从Web服务返回的数据。

这是否意味着我应该在AppDelegate中调用Web服务并在获取数据后仅实例化UINavigationViewController?

我还考虑过创建一个包含UINavigationViewController并将其视图作为子视图的包装器UIViewController。但看起来像嵌套视图控制器有一些缺点,主要是生命周期和旋转。

有更好的方法吗?谢谢!

更新:我的同事推荐了另一种可能最干净的解决方案。在这里,AppDelegate加载一个“bootstraper”ViewController,其主要目的是从webservice中提取数据,并可能显示一个加载指示器。一旦获得数据,它将自行删除并添加具有相应根的导航控制器。

3 个答案:

答案 0 :(得分:2)

可能会推送一个带有“等待数据...”视图的viewcontroller,然后当web响应到达时弹出它并推送相应的viewcontroller?

答案 1 :(得分:0)

Web服务调用可能需要一段时间。在Web花费时间回应时冻结UI是一个非常糟糕的主意。使用旋转轮和“请稍候...”通知加载视图控制器(和视图),启动服务调用,然后在服务响应后,将其替换为真实的。

答案 2 :(得分:0)

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];

如果在Web服务返回之前您不打算在导航控制器中显示任何内容,那么您可以等到它返回后再创建导航控制器。如果您要在导航控制器中显示其他视图控制器