【发布时间】:2015-04-12 20:01:40
【问题描述】:
我觉得应该工作的东西有困难,我想知道关于初始化 IBOutlets 的值是否有一些我不理解的事情。
所以我创建了一个包含三个 IBOutlets 的类。然后我为这些出口变量创建了初始化程序。当我创建一个类的新实例并将硬编码值传递给它时,我得到 nil 作为回报。
所以我已经 println()'ed 传入的 settingLabel 值,以确保传入的参数确实带有一个值,它按预期返回为 "hello"。然后我尝试将值分配给 settingsLabel.text,但是当我调用 println(settingsLabel.text) 时返回为 nil。
(线程 1:EXV_BAD_INSTRUCTION(代码=EXC_I386_INVOP,子代码=0x0))
我的问题是:
我在这里缺少什么和/或如何使用初始化程序为 IBOutlet 分配值?
这是我对初始化程序的调用:
let cell = SettingCell(settingLabel: "hello", settingSwitch: true, timeSetting: 3)
这是我的 SettingCell.swift 类:
class SettingCell: UITableViewCell {
@IBOutlet weak var settingsLabel: UILabel!
@IBOutlet weak var settingsSwitch: UISwitch!
@IBOutlet weak var timeSetting: UILabel!
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
}
init(settingLabel: String, settingSwitch: Bool, timeSetting: NSNumber) {
println(settingLabel) // returns hello <--------------------
super.init(style: .Default, reuseIdentifier: "SwitchSettingCell")
settingsLabel.text = settingLabel
self.settingsSwitch.on = settingSwitch
self.timeSetting.text = timeSetting.description as String
println(settingsLabel.text) // returns nil <--------------------
}
required init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
var cellDelegate: SettingCellDelegate?
@IBAction func handledSwitchChange(sender: UISwitch) {
self.cellDelegate?.didChangeSwitchState(sender: self, isOn:settingsSwitch!.on)
}
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
override func setSelected(selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
}
我的故事板:
【问题讨论】:
-
设置标签不是可选的
-
我在故障排除期间正在使用可选选项,感谢您指出这一点,我已经测试并更新了帖子以反映当前失败的代码。