Swift 3 viewDidLoad() - 致命错误:意外地发现零,同时展开一个可选值
问题描述:
我已经尝试了所有以前的建议来解决这个问题,但仍然没有运气。它正在工作(UIPickerView正确填充),但现在应用程序崩溃后viewDidLoad()运行。已验证所有IBOutlet已正确连接。尝试重新创建可可触摸文件。Swift 3 viewDidLoad() - 致命错误:意外地发现零,同时展开一个可选值
这是我的视图控制器代码。这应该是我忽视的一些小事。帮帮我!!
class SettingsVC: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate {
@IBOutlet weak var targetCadenceLabel: UILabel?
@IBOutlet weak var cadenceStepper: UIStepper?
@IBOutlet weak var goalPicker: UIPickerView?
var pickerDataSource = ["improve SPM", "maintain SPM"]
override func viewDidLoad() {
super.viewDidLoad()
self.goalPicker?.dataSource = self
self.goalPicker?.delegate = self
//MARK: Setup Tab Bar
let tabBarItem = self.tabBarItem
let incomingSelectedImage: UIImage! = UIImage(named: "settings_icon")?.withRenderingMode(.alwaysOriginal)
tabBarItem?.selectedImage = incomingSelectedImage
tabBarItem?.setTitleTextAttributes([NSForegroundColorAttributeName : UIColor(red: 60/255, green: 159/255, blue: 255/255, alpha: 1.0)], for: UIControlState.selected)
}
//MARK: - Delegates and data sources
//MARK: Data Sources
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return pickerDataSource.count
}
//MARK: Delegates
func pickerView(_ pickerView: UIPickerView, attributedTitleForRow row: Int, forComponent component: Int) -> NSAttributedString? {
let titleData = pickerDataSource[row]
let myFont = UIFont.systemFont(ofSize: 18)
let fontColor = UIColor(red: 60/255, green: 159/255, blue: 255/255, alpha: 1.0)
let myTitle = NSAttributedString(string: titleData, attributes: [NSFontAttributeName: myFont,NSForegroundColorAttributeName:fontColor])
return myTitle
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
}
@IBAction func cadenceStepper(_ sender: UIStepper) {
targetCadenceLabel?.text = Int(sender.value).description
}
@IBAction func goPremiumTapped(_ sender: UIButton) {
print("Go Premium Button Tapped")
}
}
答
您正在展开中只有一个在你的viewDidLoad线和多数民众赞成在这里:
let incomingSelectedImage: UIImage! = UIImage(named: "settings_icon")?.withRenderingMode(.alwaysOriginal)
与异常断点,这是代码崩溃行确认后,你可能想要做
let incomingSelectedImage:UIImage? ..........................
设置一个异常断点,发现哪一行导致崩溃的 – Paulw11
请参阅http://www.raywenderlich.com/10209/my-app-crashed-now-what-part-1学习如何调试碰撞。结合重复问题,你可以找出你的问题。 – rmaddy
检查零条件第一就是这样,然后分配给tabbaritem图像..... 如果让incomingSelectedImage =的UIImage(命名为: “settings_icon”)?withRenderingMode(.alwaysOriginal){? tabBarItem .selectedImage = incomingSelectedImage } –