IOS - 在展开可选值时意外发现 nil
IOS - unexpectedly found nil while unwrapping an Optional value
您好,我正在 IOS 上实现一个教程屏幕,所以我正在使用 PageViewController。我正在学习本教程
https://www.youtube.com/watch?v=OnC8XVdHsVM
教程代码可以在这里找到
https://github.com/simplyi/UIPageVIewControllerExample
当我 运行 应用程序出现此错误时
"unexpectedly found nil while unwrapping an Optional value"
程序停在这一行
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
}
任何人都知道这一行有什么问题。
在 viewDidLoad 中,您必须设置 var imageFileName: String!使用前
创建一个类似于 ( var name : type!) 的 var 意味着您创建了一个类型为 type 的可选类型并将其设置为 nil 但由于 !并不是 ? ,你永远不会设置 imageFileName !
你需要做的是在使用之前在 viewDidLoad 中设置 imageFileName :
override func viewDidLoad() {
super.viewDidLoad()
if imageFileName == nil {
imageFileName = "startscreen"
}
myImageView.image = UIImage(named:imageFileName)
}
您好,我正在 IOS 上实现一个教程屏幕,所以我正在使用 PageViewController。我正在学习本教程
https://www.youtube.com/watch?v=OnC8XVdHsVM
教程代码可以在这里找到
https://github.com/simplyi/UIPageVIewControllerExample
当我 运行 应用程序出现此错误时
"unexpectedly found nil while unwrapping an Optional value"
程序停在这一行
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
}
任何人都知道这一行有什么问题。
在 viewDidLoad 中,您必须设置 var imageFileName: String!使用前
创建一个类似于 ( var name : type!) 的 var 意味着您创建了一个类型为 type 的可选类型并将其设置为 nil 但由于 !并不是 ? ,你永远不会设置 imageFileName !
你需要做的是在使用之前在 viewDidLoad 中设置 imageFileName :
override func viewDidLoad() {
super.viewDidLoad()
if imageFileName == nil {
imageFileName = "startscreen"
}
myImageView.image = UIImage(named:imageFileName)
}