2016-09-28 90 views
0

我已经尝试了所有以前的建议来解决这个问题,但仍然没有运气。它正在工作(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") 
}  
} 
+0

设置一个异常断点,发现哪一行导致崩溃的 – Paulw11

+0

请参阅http://www.raywenderlich.com/10209/my-app-crashed-now-what-part-1学习如何调试碰撞。结合重复问题,你可以找出你的问题。 – rmaddy

+0

检查零条件第一就是这样,然后分配给tabbaritem图像..... 如果让incomingSelectedImage =的UIImage(命名为: “settings_icon”)?withRenderingMode(.alwaysOriginal){? tabBarItem .selectedImage = incomingSelectedImage } –

回答

0

您正在展开中只有一个在你的viewDidLoad线和多数民众赞成在这里:

let incomingSelectedImage: UIImage! = UIImage(named: "settings_icon")?.withRenderingMode(.alwaysOriginal) 

与异常断点,这是代码崩溃行确认后,你可能想要做

let incomingSelectedImage:UIImage? ..........................