【问题标题】:Objective C iOS pre load viewsObjective C iOS 预加载视图
【发布时间】:2012-07-08 08:27:24
【问题描述】:

我有一个基于标签栏的应用程序,带有 3 个标签(视图)。在应用程序委托或加载的第一个选项卡中,我将如何在后台加载其他 2 个视图的全部内容?

现在我在每个有问题的视图中都有一个 webView。我的部分问题是它们在 viewDidLoad 中加载,但导致等待空白屏幕

谢谢

【问题讨论】:

    标签: objective-c ios xcode uiwebview uitabbarcontroller


    【解决方案1】:

    答案对我来说不是那么清楚.. 所以我在UITabBarViewController 中包含 3 个UIViewController(或它们的子类),强制它们加载视图的方法是调用-view 属性在您添加到 UITabbarViewController 实例之前,在 AppDelegate 丰富的它们中的每一个上。像这样的:

    UIViewController * myViewController = [[UIViewController alloc] initWithNibName:@"mynib" bundle:nil];
    [myViewController view];//<--here you are forcing the view to be loaded before it will be called from the tabbatviewcontroller
    

    这是一种避免(根本不是)您遇到的行为的方法...在后台加载的概念要复杂得多。

    【讨论】:

      【解决方案2】:

      尝试:

      viewController.view.hidden = NO; 
      

      对于您要预加载的任何 viewController,它已被分配和初始化。也就是说,在 alloc 和 initWithNibName:... 完成之后。

      【讨论】:

      • 如果我没记错的话,您实际上可以使用viewController.view 的任何语句,并获得相同的效果。我认为view 属性可能是通过延迟加载实现的,因此一旦有人尝试引用它,它就会加载。
      • 但是这个不需要“返回”,所以没有显示警告! :)
      • 这在 Xcode 6 中更为重要(至少在使用 Swift 时),它在不使用 viewController.view 的值时会报错。
      【解决方案3】:

      我通常使用这样的东西:

      if (vc.view == nil)      // force load of view
      {
          NSLog(@"%s ***** ERROR: view == nil: %@", __PRETTY_FUNCTION__, vc);
      }
      

      注意:在调用 vc.view 之后,视图应该永远为零——这是一个非常严重的分配错误。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-27
        • 1970-01-01
        • 1970-01-01
        • 2016-08-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多