从数组的UIImage名称不断返回零值。

在容器中设置页面视图。 遵循我可以find的所有说明(初学者)。

这两个数组在主视图控制器中,它们具有我要填充页面的图像的名称。

self.shirtImage = NSArray(objects: "shirt1", "shirt2") self.pantsImage = NSArray(objects: "pants1", "pants2") 

每当我运行程序,这两行:

 self.todayShirt.image = UIImage(named: self.shirtName) self.todayPants.image = UIImage(named: self.pantsName) 

返回错误fatal error: unexpectedly found nil while unwrapping an Optional valueCUICatalog: Invalid asset name supplied:这意味着他们从数组中收到一个零值。

页面内容类看起来像这样:

 class TodayPicksViewController: UIViewController { @IBOutlet weak var todayShirt: UIImageView! @IBOutlet weak var todayPants: UIImageView! var pageIndex: Int! var shirtName: String! var pantsName: String! override func viewDidLoad() { super.viewDidLoad() self.todayShirt.image = UIImage(named: self.shirtName) self.todayPants.image = UIImage(named: self.pantsName) 

而主视图控制器是这样设置的:

 class ViewController: UIViewController, UIPageViewControllerDataSource { var pageViewController: UIPageViewController! var shirtImage: NSArray! var pantsImage: NSArray! override func viewDidLoad() { super.viewDidLoad() self.shirtImage = NSArray(objects: "shirt1", "shirt2") self.pantsImage = NSArray(objects: "pants1", "pants2") self.pageViewController = self.storyboard?.instantiateViewControllerWithIdentifier("PageViewController") as! UIPageViewController self.pageViewController.dataSource = self let startVC = self.viewControllerAtIndex(0) as TodayPicksViewController let viewControllers = NSArray(object: startVC) self.pageViewController.setViewControllers((viewControllers as! [UIViewController]), direction: .Forward, animated: true, completion: nil) self.pageViewController.view.frame = CGRectMake(0, 30, self.view.frame.width, self.view.frame.height - 60) self.addChildViewController(self.pageViewController) self.view.addSubview(self.pageViewController.view) self.pageViewController.didMoveToParentViewController(self) } func viewControllerAtIndex(index: Int) -> TodayPicksViewController { if ((self.shirtImage.count == 0) || index >= self.shirtImage.count){ return TodayPicksViewController() } let vc: TodayPicksViewController = self.storyboard?.instantiateViewControllerWithIdentifier("TodayPicksViewController") as! TodayPicksViewController vc.shirtName = self.shirtImage[index] as! String vc.pantsName = self.pantsImage[index] as! String vc.pageIndex = index return vc } 

我有另一个项目有一个工作页面视图类似于这一切,一切工作完美,我已经复制了几乎所有的确切,所以我不明白为什么从主视图控制器的值不正确传递到页面视图在这一个。 任何援助表示赞赏。

我想我已经find了你的问题,你的代码是否在这个if语句中input?

 if ((self.shirtImage.count == 0) || index >= self.shirtImage.count){ return TodayPicksViewController() } 

如果是这样, shirtNamepantsName将永远不会被初始化。

当您更改UIImageView的图像时出现问题。 试试todayShirt.image = UIImage(imageLiteral: "\(shirtName)")todayPants.image = UIImage(imageLiteral: "\(pantsName)")

然后非常确定你的XCode项目中插入了4张图片: shirt1.pngshirt2.pngpants1.pngpants2.png 。 也可以,如果他们是shirt1.jpg

如果这仍然没有帮助,请尝试更改您的数组创build方法。 而不是使用NSArray,只在viewdidload()部分添加对象,只需在全局范围内创build数组和添加对象即可。 所以,现在你有var shirtImage: NSArrayvar shirtImage: NSArray ,删除这两个并添加var shirtsArray:NSMutableArray = ["shirt1", "shirt2"]var pantsArray:NSMutableArray = ["pants1", "pants2"]