2016-05-30 6 views
0

Привет, следуйте руководству по UIPageViewController для создания галереи изображений в моем проекте. http://www.theappguruz.com/blog/easy-steps-to-implement-uipageviewcontroller-in-swift даже загрузите демоверсию, и она работает, но в моем случае, если я получаю сообщение об ошибке, и приложение падает.UIPageViewController в 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 
    } 



} 
+0

'strPhotoName' является' nil', потому что вы не установили его правильно. –

ответ

1

Я считаю Хоакин правильно, вы заставляете разворачивать факультативное значение, вам необходимо либо инициализировать значения, когда вы объявляете их или относиться к ним, как и разворачивать опции их по мере необходимости.

Попробуйте это:

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

+0

Я пробую, что вы говорите, но я получил ту же ошибку. Может быть связь между PageContentViewController и ViewController2? –

+0

Можете ли вы опубликовать обновленную ошибку после изменения кода? Ошибка в вашем вопросе напрямую связана с принудительной разворачиванием необязательного значения. можете ли вы подтвердить, что изображение, которое вы используете, имеет правильное имя и существует в проекте? –

+0

! [Изображение] (http://subefotos.com/ver/?b15b29a8dec79c51bbd8bbddb0ee0f65o.png). ! [Изображение2] (http://subefotos.com/ver/?a926e699747106523208af14680a1b9co.png). –

1
var strPhotoName: String! 

Это буквально ноль. Вам нужно будет присвоить ему имя изображения. Допустим, ваше изображение называется cloudsImage.png

Вы должны установить ваше var strPhotoName, как это, в viewDidLoad, если хотите.

override func viewDidLoad() { 
    super.viewDidLoad() 
    strPhotoName = "cloudsImage.png" 
    imageView.image = UIImage(named: strPhotoName) 
    lblTitle.text = strTitle 

} 
+0

Я пробую то, что вы сказали, но я получил ту же ошибку, может быть в связи между PageContentViewController и ViewController2? –

0
import UIKit 

class PageContentViewController: UIViewController { 


    @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 

    } 
} 

главная ошибка в том, что класс страницы ошибся теперь проблема решена.

Смежные вопросы