的UILabel - 意外地发现零而展开的可选值
创建页面动态使用这个代码,它创建了一个关于的方式向下代码1/3 PageViewController的UILabel - 意外地发现零而展开的可选值
import UIKit
class PageViewController: UIViewController, UIPageViewControllerDataSource, UIPageViewControllerDelegate {
var pvc:UIPageViewController?
var testArray: [String] = []
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
pvc = UIPageViewController(
transitionStyle: .Scroll,
navigationOrientation: .Horizontal,
options: nil)
// Make this object the datasource and delegate for the PageViewController
self.pvc?.delegate = self
self.pvc?.dataSource = self
// Populate an array of test content for the pages
testArray = ["Page 1", "Page 2", "Page 3"]
// Create an array of child pages
var swipePage:SwipePageController = SwipePageController()
println("Page view Controller: \(testArray[0])")
swipePage.name = testArray[0]
var pageArray: NSArray = [swipePage]
self.pvc?.setViewControllers(pageArray, direction: .Forward, animated: true, completion: nil)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? {
let index:Int! = (viewController as SwipePageController).index!
if (index >= self.testArray.count){
return nil
}
index + 1
return viewControllerAtIndex(index)
}
func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? {
let index:Int! = (viewController as SwipePageController).index!
if index == NSNotFound {
return nil
}
index - 1
return viewControllerAtIndex(index)
}
func presentationCountForPageViewController(pageViewController: UIPageViewController) -> Int {
return self.testArray.count
}
func presentationIndexForPageViewController(pageViewController: UIPageViewController) -> Int {
let page = self.pvc?.viewControllers[0] as SwipePageController
let name = page.name
return find(self.testArray, name!)!
}
func viewControllerAtIndex(index: Int) -> SwipePageController?
{
if self.testArray.count == 0 || index >= self.testArray.count
{
return nil
}
// Create a new view controller and pass suitable data.
let swipeView = SwipePageController()
swipeView.name = self.testArray[index]
swipeView.index = index
return swipeView
}
中的println(),不显示我期望看到的价值。因为我动态创建的视图控制器的代码是在这里:
import UIKit
class SwipePageController: UIViewController {
// var to hold the var to display to the interface
var name:String?
var index:Int?
@IBOutlet weak var testLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
println(name!)
if let passedName = name? {
self.testLabel.text = passedName
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
/*
// MARK: - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
// Get the new view controller using segue.destinationViewController.
// Pass the selected object to the new view controller.
}
*/
}
的println(!名字)确实显示正确的值也是如此。但是,我无法用值填充标签。我得到以下错误:
“致命错误:意外发现零而展开的可选值”
我在我束手无策......我想不出有什么不工作。另外,看到我的Xcode界面的屏幕截图发生错误:
谁能帮助?
我认为问题是你实例化SwipePageController的方式。
取而代之的是:
var swipePage:SwipePageController = SwipePageController()
试试这个:
var swipePage: SwipePageController = UIStoryboard(name: "YourStoryboardName", bundle: nil).instantiateViewControllerWithIdentifier("YourViewControllerId")
替换“YourStoryboardName”与您的故事板文件的实际名称,而“YourViewControllerId”与您的刷卡页的故事板标识控制器。如果您尚未给出故事板ID,请务必在“身份检查器”中进行设置。
确实解决了错误。现在我可以解决其余的问题了! :) 谢谢!!! – 2014-12-13 19:58:26
它为我工作,谢谢迈克:) – Marin 2017-01-12 20:36:59
看起来你的testLabel IBOutlet没有连接任何东西。它在监视窗口中显示为零。你在使用故事板吗? – 2014-12-13 19:11:08
@MikeTaverne我正在使用故事板。如果你想看,我也可以包括它。 IBOutlet附加到标签上(如果我将鼠标移到排水沟中的点上,则实际标签会突出显示)......这就是为什么这会让人困惑... – 2014-12-13 19:15:27
想到的唯一一件事就是让确保在故事板中正确设置类名称:在故事板中选择视图控制器,转到“身份检查器”并验证“自定义类”下的“类名称”设置为“SwipePageController”。 – 2014-12-13 19:18:39