在 Swift 中设置 UIButton 图像 - 当前展开为 nil
Set UIButton Image in Swift - currently unwraps as nil
我很难设置 UIButton 的图像。我已经检查了其他关于如何执行此操作的帖子,它看起来很简单(但后来,我在这里)。
在我的程序中,按钮显示的图像取决于trip.weather。在尝试设置按钮的图像之前,我正在使用开关来设置图像。但是,在调试时,控制台显示以下内容:
'2015-05-03 13:40:31.117 PackPlanner[581:4465] < UIImage: 0x7fd2a843fac0>, {600, 300}
致命错误:在展开可选值时意外发现 nil
(lldb)'
class TripOverviewViewController: UITableViewController {
@IBOutlet var highTempLabel: UILabel!
@IBOutlet var lowTempLabel: UILabel!
@IBOutlet var weatherLabel: UILabel!
@IBOutlet var locationLabel: UILabel!
@IBOutlet var dateLabel: UILabel!
@IBOutlet var numOfPeopleLabel: UILabel!
@IBOutlet var sunriseLabel: UILabel!
@IBOutlet var sunsetLabel: UILabel!
@IBOutlet weak var weatherButtonImage: UIButton!
@IBAction func weatherButton(sender: UIButton) {
}
var tripItem: AnyObject? {
didSet {
// Update the view.
self.configureView()
}
}
func configureView() {
// Update the user interface for the trip detail.
if let trip: Trip = self.tripItem as? Trip{
if var label = self.locationLabel {
label.text = trip.location
}
if var label = self.numOfPeopleLabel {
label.text = trip.numOfPeople.stringValue
}
if var label = self.dateLabel {
var formattedDate = NSDateFormatter.localizedStringFromDate(trip.startDate, dateStyle: .LongStyle, timeStyle: .NoStyle)
label.text = formattedDate
}
if var label = self.weatherLabel {
label.text = trip.weather
}
var theImage = UIImage(named: "Sunny") as UIImage!
switch trip.weather {
case "Partly Cloudy":
theImage = UIImage(named:"PartlyCloudy")
case "Light Snow":
theImage = UIImage(named:"LightSnow")
case "Rainy":
theImage = UIImage(named:"Rainy")
default:
theImage = UIImage(named:"Sunny")
}
NSLog(" \(theImage.description)") //for debugging
self.weatherButtonImage.setImage(theImage, forState: .Normal)
}
}
override func viewDidLoad() {
super.viewDidLoad()
self.configureView()
}
在 NSLog(" (theImage.description)")
之后试试这个
if let tempButton = self.weatherButtonImage
{
tempButton.setImage(theImage, forState:.Normal)
} else
{ NSLog("Button is nil")
}
确定你的按钮是否为 nil。
如果您的按钮为零,请在故事板中重新连接它。
你确定theImage存在并且不是nil吗? UIImage 可能无法找到名为 "Sunny" 的图像。另一种可能是 self.weatherButtonImage 在那一点上为 nil(我看到它是一个 outlet),所以尝试在 viewDidLayoutSubviews 的 IB 布局完成时设置它。
我很难设置 UIButton 的图像。我已经检查了其他关于如何执行此操作的帖子,它看起来很简单(但后来,我在这里)。
在我的程序中,按钮显示的图像取决于trip.weather。在尝试设置按钮的图像之前,我正在使用开关来设置图像。但是,在调试时,控制台显示以下内容:
'2015-05-03 13:40:31.117 PackPlanner[581:4465] < UIImage: 0x7fd2a843fac0>, {600, 300} 致命错误:在展开可选值时意外发现 nil (lldb)'
class TripOverviewViewController: UITableViewController {
@IBOutlet var highTempLabel: UILabel!
@IBOutlet var lowTempLabel: UILabel!
@IBOutlet var weatherLabel: UILabel!
@IBOutlet var locationLabel: UILabel!
@IBOutlet var dateLabel: UILabel!
@IBOutlet var numOfPeopleLabel: UILabel!
@IBOutlet var sunriseLabel: UILabel!
@IBOutlet var sunsetLabel: UILabel!
@IBOutlet weak var weatherButtonImage: UIButton!
@IBAction func weatherButton(sender: UIButton) {
}
var tripItem: AnyObject? {
didSet {
// Update the view.
self.configureView()
}
}
func configureView() {
// Update the user interface for the trip detail.
if let trip: Trip = self.tripItem as? Trip{
if var label = self.locationLabel {
label.text = trip.location
}
if var label = self.numOfPeopleLabel {
label.text = trip.numOfPeople.stringValue
}
if var label = self.dateLabel {
var formattedDate = NSDateFormatter.localizedStringFromDate(trip.startDate, dateStyle: .LongStyle, timeStyle: .NoStyle)
label.text = formattedDate
}
if var label = self.weatherLabel {
label.text = trip.weather
}
var theImage = UIImage(named: "Sunny") as UIImage!
switch trip.weather {
case "Partly Cloudy":
theImage = UIImage(named:"PartlyCloudy")
case "Light Snow":
theImage = UIImage(named:"LightSnow")
case "Rainy":
theImage = UIImage(named:"Rainy")
default:
theImage = UIImage(named:"Sunny")
}
NSLog(" \(theImage.description)") //for debugging
self.weatherButtonImage.setImage(theImage, forState: .Normal)
}
}
override func viewDidLoad() {
super.viewDidLoad()
self.configureView()
}
在 NSLog(" (theImage.description)")
之后试试这个 if let tempButton = self.weatherButtonImage
{
tempButton.setImage(theImage, forState:.Normal)
} else
{ NSLog("Button is nil")
}
确定你的按钮是否为 nil。
如果您的按钮为零,请在故事板中重新连接它。
你确定theImage存在并且不是nil吗? UIImage 可能无法找到名为 "Sunny" 的图像。另一种可能是 self.weatherButtonImage 在那一点上为 nil(我看到它是一个 outlet),所以尝试在 viewDidLayoutSubviews 的 IB 布局完成时设置它。