【问题标题】:PageViewController doesnt work on Swift 2.0PageViewController 在 Swift 2.0 上不起作用
【发布时间】:2015-10-27 19:28:33
【问题描述】:

我的应用程序在 ios8 上运行良好。但是,在将所有内容更新到 ios9 后,我遇到了 nill 值的问题。我不知道什么值是零。代码如下:

func resetToChosenPage(index: Int!) {
    /* Getting the page View controller */
    pageViewController = self.storyboard?.instantiateViewControllerWithIdentifier("PageViewController") as! UIPageViewController
    self.pageViewController.dataSource = self

    pageContentViewController = self.viewControllerAtIndex(index)

    if pageContentViewController != nil {
    self.pageViewController.setViewControllers([pageContentViewController], direction: UIPageViewControllerNavigationDirection.Forward, animated: true, completion: nil)
    }
    /* We are substracting 30 because we have a start again button whose height is 30*/
    self.pageViewController.view.frame = CGRectMake(0, self.navigationController!.navigationBar.frame.height , self.view.frame.width, self.view.frame.height - 30)
    self.addChildViewController(pageViewController)
    self.view.addSubview(pageViewController.view)
    self.pageViewController.didMoveToParentViewController(self)

}

func viewControllerAtIndex(index : Int) -> UIViewController? {


    if((dataArray.count == 0) || (index >= dataArray.count)) {
        return nil
    }
    let pageContentViewController = self.storyboard?.instantiateViewControllerWithIdentifier("SingleArticleViewController") as! SingleArticleViewController

    self.delegate = pageContentViewController
    pageContentViewController.delegate = self
  //  pageContentViewController.delegateWebView = self

    pageContentViewController.singleArticleIndex = index
    pageContentViewController.categoryID = categoryID
    pageContentViewController.dateOfPub = dataArray[index].pubDate
    pageContentViewController.category = dataArray[index].category
    pageContentViewController.newsTitle = dataArray[index].pageTitle
    pageContentViewController.videoLink = dataArray[index].videoLink
    return pageContentViewController
}

一行 self.pageViewController.SetViewControllers([pageContentViewController]... 我有错误“致命错误:在展开可选值时意外发现 nil”。事实是这段代码在 ios8 上运行良好。我检查并找不到nil 值。此外,我检查了情节提要的所有标识符,但它们是正确的。伙计们,如果这段代码在 ios8 上运行会出现什么问题?

【问题讨论】:

    标签: swift null swift2 ios9


    【解决方案1】:

    我建议尝试更改包装 setViewControllers: 调用的 if 子句,以便它显式检查 pageContentViewController 和 pageViewController:

    if let pageVC = self.pageViewController, let contentVC = self.pageContentViewController {
        pageVC.setViewControllers([contentVC], direction: UIPageViewControllerNavigationDirection.Forward, animated: true, completion: nil)
    }
    

    一般来说,我会尽量避免在您的 resetToChosenPage: 方法中使用隐式解包选项(例如 Int!)。因为它们会导致这些“意外发现 nil”错误。

    此外,由于您的 resetToChosenPage: 方法不会检查 pageViewController 是否已被实例化,因此多次调用它会导致 PageViewController 的许多实例被实例化并相互堆叠。这可能不是你想要的。

    【讨论】:

    • 我将它们都检查为 nil 值。 Pageviewcontroller 和 PageContentViewController 不为零!我正在考虑您的另一个主张,即我们不能多次启动它。如何避免这种情况?所以,我必须编写代码,例如如果 pageviewcontroller 为 nil 则实例化它,如果不是则不这样做?
    猜你喜欢
    • 1970-01-01
    • 2019-11-10
    • 2015-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-09
    • 1970-01-01
    相关资源
    最近更新 更多