0

我有一个带有标签栏控制器和很多 UIViewController 的应用程序,我在情节提要上定义了界面,我希望当用户午餐应用程序时(加载应用程序时)加载所有 ControllerView,而不是当用户选择选项卡时(我的 UIViewController 很复杂,加载时间很短)

4

1 回答 1

1

您发布的答案不正确;您不应该-loadView手动调用。从文档中:

讨论

你不应该直接调用这个方法。视图控制器在其视图属性被请求但当前为 nil 时调用此方法。此方法加载或创建视图并将其分配给视图属性。

因此,您应该改为简单地访问该view属性。您修改后的代码将是:

UITabBarController *tabBar = (UITabBarController *)self.window.rootViewController;
for(int i = 0; i < 5; i++) {
    [[tabBar.tabBarController.viewControllers objectAtIndex:i] view];
}

另请注意,这项工作可能不应该在您的-application:didFinishLaunchingWithOptions:方法中进行,因为如果此方法在 5 秒内没有返回,iOS 将终止您的应用程序。您可以在下一次 runloop 迭代中安排此任务,如下所示:

[[NSOperationQueue mainQueue] addOperationWithBlock:^{
    [self preloadTabs];
}];
于 2012-10-04T13:50:43.243 回答