ios - Swift 3 viewDidLoad() - fatal error : unexpectedly found nil while unwrapping an Optional value

标签 ios swift xcode8

<分区>

我已经尝试了所有以前的建议来解决这个问题,但仍然没有成功。它工作正常(UIPickerView 正确填充),但现在应用程序在 viewDidLoad() 运行后崩溃。已验证所有 IBOutlet 均已正确连接。尝试重新创建 cocoa touch 文件。

这是我的 View Controller 代码。这一定是我忽略的小事。帮忙!!

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? ..........................

关于ios - Swift 3 viewDidLoad() - fatal error : unexpectedly found nil while unwrapping an Optional value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39736916/

相关文章:

swift - 在控制流中使用 switch 语句的问题。 swift 3

ios - 无法从 iCloud 照片库下载视频

swift - 使用 Swift 在 SpriteKit 中导入外部节点

ios - 将代码推送到 github 时出现 Twilio 框架压缩问题

iphone - 特定部分应位于表格 View 的顶部

iphone - UITableViewCell,具有动态高度的 UITextView

swift - 在部署目标 iOS 8 的 iOS 应用程序中使用聚光灯

xcode - 如何在 Xcode 8 中关闭线条突出显示或编辑其颜色?

objective-c - 对于 xCode 中的 XMLparser,我要测试什么字符串名称?

ios - uinavigationcontroller 中的 Storyboard 和后退按钮