2016-05-30 7 views
0

私のプロジェクトで写真のギャラリーを生成するためのUIPageViewControllerのチュートリアルに従っています。http://www.theappguruz.com/blog/easy-steps-to-implement-uipageviewcontroller-in-swiftデモをダウンロードしても動作しますが、エラーが発生してアプリケーションが低下します。次の私のコードで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 
    } 



} 
+0

'strPhotoName'は正しく設定されていないため、' nil'です。 –

答えて

1

オプションの値のアンラップを余儀なくされている、あなたがそれらを宣言するときに、あなたの値を初期化またはoptionalsとして扱い、あなたがそれらを必要としてそれらをアンラップするか必要があります。 、そして、あなたは画像の名前(画像はプロジェクト内に存在することを確認してください)と、タイトルの名前を指定する必要があなたのコード内のどこかを

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

![Image](http://subefotos.com/ver/?b15b29a8dec79c51bbd8bbddb0ee0f65o.png)。 ![画像2](http://subefotos.com/ver/?a926e699747106523208af14680a1b9co.png)。 –

1
var strPhotoName: String! 

それは文字通りゼロです。イメージ名を割り当てる必要があります。 あなたのイメージがcloudsImage.pngと呼ばれているとします。

必要に応じて、あなたのvar strPhotoNameをviewDidLoadに設定します。私はJoakinが正しいと信じている

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 

    } 
} 

詳細についてはこちらをご覧ください。