我在尝试更改标签的文本时遇到标题中的错误,该标签属于Page类(UIViewController的子类)
@IBAction func StartButton(sender: AnyObject) {
for quote in quoteList {
var newPage = Page()
//error is on the next line:
newPage.Label.text = quote
pageArray!.append(newPage)
}
}
}
这是Page class:
class Page : UIViewController{
var index: Int = 0
var parent: PageArray?
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBOutlet weak var Label: UILabel!
@IBAction func previousButton(sender: AnyObject) {
}
@IBAction func gotoListButton(sender: AnyObject) {
}
@IBAction func nextButton(sender: AnyObject) {
}
}
对于快速编程和一般的iOs,我是新手;如果已经提出过类似的问题,我道歉。我先搜索过,但没有找到适合我的解决方案。 我怀疑问题在于newPage的初始化,并尝试以几种不同的方式进行,但我似乎无法做到正确。 我的问题是我到底做错了什么,我该如何解决?
编辑:让它像这样工作(通过工作我的意思是不会崩溃,什么也不做):
@IBAction func StartButton(sender: AnyObject) {
var pageArray: PageArray = PageArray()
for quote in quoteList {
var newPage = Page(nibName: "Page", bundle: nil)
if newPage.Label != nil {
newPage.Label.text = quote
}
pageArray.append(newPage)
}
}
现在看来确定newPage.Label是nil。
答案 0 :(得分:4)
好吧,pageArray
可能是零,而!
你假装它不是。
实例化pageArray应解决您的问题。
您可以查看第一个答案here,详细了解swift中的问题和感叹号
修改强>:
您的问题也可能来自您的控制器初始化,您可能想尝试:
let mystoryboard:UIStoryboard = UIStoryboard(name: "storyboardName", bundle: nil)
var newPage:Page = mystoryboard.instantiateViewControllerWithIdentifier("idYouAssigned") as! Page
答案 1 :(得分:0)
我知道你的问题。从Nib加载ViewController时。实际上,在加载ViewController之前需要一段延迟时间。
以下代码可帮助您立即加载ViewController。
@IBAction func StartButton(sender: AnyObject) {
var pageArray: PageArray = PageArray()
for quote in quoteList {
var newPage = Page(nibName: "Page", bundle: nil)
let _ = newPage.view // A trick. It's help your view load immediate
// Your Page has been loaded.
newPage.Label.text = quote
pageArray.append(newPage)
}