ios - Swift 中的 UIPageViewController

标签 ios xcode swift

您好,我正在按照 UIPageViewController 上的教程在我的项目中生成图片库 http://www.theappguruz.com/blog/easy-steps-to-implement-uipageviewcontroller-in-swift甚至下载了演示版,它也能正常工作,但在我的应用程序中,如果出现错误并且应用程序失败。

fatal error: unexpectedly found nil while unwrapping an Optional value

enter image description here

接下来是我的代码。

PageContentViewController.swift:

import UIKit

class PageContentViewController: UIPageViewController {


    @IBOutlet weak var lblTitle: UILabel!

    @IBOutlet weak var imageView: UIImageView!


    var pageIndex: Int = 0
    var strTitle: String!
    var strPhotoName: String!


    override func viewDidLoad() {
        super.viewDidLoad()

        imageView.image = UIImage(named: strPhotoName)
        lblTitle.text = strTitle

    }
}

ViewController2.swift

import UIKit

class ViewController2: UIPageViewController, UIPageViewControllerDataSource
{
    var arrPageTitle: NSArray = NSArray()
    var arrPagePhoto: NSArray = NSArray()

    override func viewDidLoad() {
        super.viewDidLoad()

        arrPageTitle = ["This is The App Guruz", "This is Table Tennis 3D", "This is Hide Secrets"];
        arrPagePhoto = ["1.jpg", "2.jpg", "3.jpg"];

        self.dataSource = self

        self.setViewControllers([getViewControllerAtIndex(0)] as [UIViewController], direction: UIPageViewControllerNavigationDirection.Forward, animated: false, completion: nil)
    }

    // MARK:- UIPageViewControllerDataSource Methods

    func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController?
    {
        let pageContent: PageContentViewController = viewController as! PageContentViewController

        var index = pageContent.pageIndex

        if ((index == 0) || (index == NSNotFound))
        {
            return nil
        }

        index -= 1;
        return getViewControllerAtIndex(index)
    }

    func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController?
    {
        let pageContent: PageContentViewController = viewController as! PageContentViewController

        var index = pageContent.pageIndex

        if (index == NSNotFound)
        {
            return nil;
        }

        index += 1;
        if (index == arrPageTitle.count)
        {
            return nil;
        }
        return getViewControllerAtIndex(index)
    }

    // MARK:- Other Methods
    func getViewControllerAtIndex(index: NSInteger) -> PageContentViewController
    {
        // Create a new view controller and pass suitable data.
        let pageContentViewController = self.storyboard?.instantiateViewControllerWithIdentifier("PageContentViewController") as! PageContentViewController

        pageContentViewController.strTitle = "\(arrPageTitle[index])"
        pageContentViewController.strPhotoName = "\(arrPagePhoto[index])"
        pageContentViewController.pageIndex = index

        return pageContentViewController
    }



}

最佳答案

我相信 Joakin 是对的,您正在强制解包一个可选值,您需要在声明它们时初始化您的值,或者将它们视为可选值并在需要时解包它们。

试试这个:

var strTitle: String?
var strPhotoName: String?

override func viewDidLoad() {
    super.viewDidLoad()
    if let photoName = strPhotoName {
     imageView.image = UIImage(named: photoName)
    }

    if let title = strTitle {
     lblTitle.text = title
    }
}

然后,您需要在代码中的某处指定图像的名称(确保该图像存在于您的项目中)和标题的名称。如果你不指定它们,更新的代码行将不会被执行。

阅读更多关于可选值的信息 here

关于ios - Swift 中的 UIPageViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37533476/

相关文章:

ios - xcode 7:滚动条上的蓝线

swift - 如何在 Swift 中仅重新加载 collectionView 的最后一个 indexPath?

ios - Swift 2 中的 MPNowPlayingInfoCenter nowPlayingInfo 错误

ios - 如何通过命令行将Xcode项目构建和部署到新的Apple的TestFlight

swift - 添加一些 pod 会导致 FirebaseApp.configure() 出现标识符问题

ios - AudioKit iOS : how can an input node be dynamically connected to mixer in active chain?

ios - 无需夏令时调整即可快速创建 EKEvent

iOS - 如何在指定区域填充颜色

ios - GCD 异步 block & EXC_BAD_ACCESS

ios - 从 Crashlytics 迁移到 Firebase 时,如何处理一个 iOS 应用程序中的多个方案/目标?