2015-12-07 2 views
0

Здравствуйте, я реализую экран учебника на IOS, поэтому я использую PageViewController. Я выполняю этот учебникIOS - неожиданно найден nil во время разворачивания необязательного значения

https://www.youtube.com/watch?v=OnC8XVdHsVM

код учебник можно найти здесь

https://github.com/simplyi/UIPageVIewControllerExample

при запуске приложения эта ошибка приходит

«неожиданно нашли ноль в то время как разворачивание Дополнительное значение "

Программа останавливается здесь на этой линии

TutorialScreenViewController.swift

var imageFileName: String! 
override func viewDidLoad() { 
    super.viewDidLoad() 


    myImageView.image = UIImage(named:imageFileName) 
    } 

В другом имя контроллера ViewController.swift Я делаю это

override func viewDidLoad() { 
      super.viewDidLoad() 

      pageImages = NSArray(objects: "startscreen","startscreen2","startscreen3") 


      self.pageViewController = self.storyboard?.instantiateViewControllerWithIdentifier("MyPageViewController") as! UIPageViewController 

      self.pageViewController.dataSource = self 

      let initialContenViewController = self.pageTutorialAtIndex(0) as TutorialScreenViewController 

      let viewControllers = NSArray(object: initialContenViewController) 

      self.pageViewController.setViewControllers(viewControllers as? [UIViewController], direction: UIPageViewControllerNavigationDirection.Forward, animated: true, completion: nil) 
      /* self.pageViewController.setViewControllers(viewControllers as [AnyObject], direction: UIPageViewControllerNavigationDirection.Forward, animated: true, completion: nil)*/ 

      self.pageViewController.view.frame = CGRectMake(0, 100, self.view.frame.size.width, self.view.frame.size.height-100) 

      self.addChildViewController(self.pageViewController) 
      self.view.addSubview(self.pageViewController.view) 
      self.pageViewController.didMoveToParentViewController(self) 

     } 
    func pageTutorialAtIndex(index: Int) -> TutorialScreenViewController 
    { 

     let pageContentViewController = self.storyboard?.instantiateViewControllerWithIdentifier("TutorialScreenViewController") as! TutorialScreenViewController 

     pageContentViewController.imageFileName = pageImages[index] as! String 
     pageContentViewController.pageIndex = index 


     return pageContentViewController 

    } 

    func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? 
    { 

     let viewController = viewController as! TutorialScreenViewController 
     var index = viewController.pageIndex as Int 

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

     index-- 

     return self.pageTutorialAtIndex(index) 

    } 

    func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? 

    { 
     let viewController = viewController as! TutorialScreenViewController 
     var index = viewController.pageIndex as Int 

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

     index++ 

     if(index == pageImages.count) 
     { 
      return nil 
     } 

     return self.pageTutorialAtIndex(index) 
    } 



    func presentationCountForPageViewController(pageViewController: UIPageViewController) -> Int 

    { 

    return pageImages.count 
    } 

    func presentationIndexForPageViewController(pageViewController: UIPageViewController) -> Int // The selected item reflected in the page indicator. 

    { 
    return 0 

    } 

кто имеет какие-либо идеи что не так с этой линией.

+0

вы добавили изображение под названием ImageFileName в документе активов? – kholl

+0

см. Я обновил вопрос. @kholl – hellosheikh

+0

присвойте переменной imagename (значение) переменной imageFileName. – poojathorat

ответ

0

В viewDidLoad вам нужно установить var imageFileName: String! перед тем как использовать его

создать var как (var name: type!) означает, что вы создаете необязательный тип типа, и вы установите его на ноль, но к нему можно получить доступ, не распаковывая его из-за! и не ? , вы никогда не устанавливаете imageFileName!

То, что вы должны сделать, это установить ImageFileName в viewDidLoad перед использованием:

override func viewDidLoad() { 
super.viewDidLoad() 
if imageFileName == nil { 
imageFileName = "startscreen" 
} 
myImageView.image = UIImage(named:imageFileName) 
} 
+0

в проекте github, ресурс не назван startscreen, но «screen1.jpg» – kholl

+0

Но есть три изображения? – hellosheikh

+0

yes Я назвал свои изображения по-разному @kholl – hellosheikh

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

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