Вы должны посмотреть на стек сбоя, чтобы увидеть фактическую строку. Есть несколько мест, где вы могли бы возникнуть проблемы:
var detail = segue.destinationViewController as! detailSkinsViewController
Это требует аварии, если destinationViewController
не из класса detailSkinsViewController
. (Классы Swift всегда должны начинаться с заглавной буквы. Это также должно быть let
, а не var
. Вы никогда не изменяете его.) Использование if-let
здесь было бы намного безопаснее.
detail.skinImg.image = UIImage(named: "s495fn")
Это очень неясно, что это, но если skinImg
является UIImageView!
, то можно было бы ожидать, чтобы это врезаться если это назначение СИБ не загружены (что вероятно). Вы, как правило, никогда не должны обращаться к другим объектам IBOutlets именно по этой причине. (Это также хороший повод, чтобы использовать ?
, а не !
для IBOutlets. Это привело бы к просто «ничего не происходит», а не грохотом.)
Вместо того, чтобы возиться с другой точкой зрения контролеров точек, вы должны создать UIImage?
недвижимость на самом контроллере представления. В своем didSet
обновите UIImageView
, если вид загружен (isViewLoaded
). В течение viewDidLoad
инициализируйте UIImageView
, используя свойство. Таким образом, у вас есть ясный API для других, чтобы установить образ, не отображающий ваши внутренние подсмотры (которые являются деталями реализации).
В качестве примера:
class ViewController: UIViewController {
@IBOutlet private var imageView: UIImageView?
var image: UIImage? {
didSet(newImage) {
self.imageView?.image = newImage
}
}
override func viewDidLoad() {
super.viewDidLoad()
self.imageView?.image = self.image
}
}
Ошибка означает, что значения не установлены. На какой строке указывается ошибка? – da1lbi3
дубликат http://stackoverflow.com/questions/30342213/moving-the-uiimageview-from-the-main-view-to-another/30343041#30343041 –