4

UIButton の画像を設定するのに苦労しています。これを行う方法について他の投稿をチェックしましたが、それは十分に簡単に思えます (しかし、ここにいます)。

私のプログラムでは、ボタンが表示する画像は trip.weather によって異なります。ボタンの画像を設定する前に、スイッチを使用して画像を設定しています。ただし、デバッグ中はコンソールに次のように表示されます。

「2015-05-03 13:40:31.117 PackPlanner[581:4465] < UIImage: 0x7fd2a843fac0>, {600, 300} 致命的なエラー: オプション値 (lldb) のラップ解除中に予期せず nil が見つかりました」

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()


}
4

2 に答える 2

2

theImage が存在し、nil ではないことを確認しますか? UIImage は、「Sunny」という名前の画像を見つけることができない場合があります。別の可能性としては、その時点で self.weatherButtonImage が nil になっている可能性があります (アウトレットだと思います) ので、viewDidLayoutSubviews で IB レイアウトが完成したら設定してみてください。

于 2015-05-03T22:04:50.917 に答える
1

NSLog(" (theImage.description)") の後にこれを試してください

    if let tempButton = self.weatherButtonImage
    {
    tempButton.setImage(theImage, forState:.Normal)
    } else
    { NSLog("Button is nil")
    }

ボタンが nil かどうかを判断します。

ボタンが nil の場合は、ストーリーボードで再接続します。

于 2015-05-03T22:03:09.630 に答える