2016-01-21 1 views
3

Я реализую пользовательский вид путем подкласса UIView и используя @IBInspectable для некоторых из моих переменных. Два из них - UIImage. Если я пытаюсь получить доступ к одной из них в коде, интерфейс строитель падает со следующим сообщением:Сбой агента интерфейса при доступе к @IBInspectable UIImage

file:///PathToMyProject/MyProject/Pod/Classes/UI/View/MyView.xib: error: IB Designables: Failed to update auto layout status: The agent crashed 

и

file:///PathToMyProject/MyProject/Pod/Classes/UI/View/MyView.xib: error: IB Designables: Failed to render instance of MyView: The agent crashed 

Все прекрасно работает на тренажере и устройства. Вот как вы можете воспроизвести его, предполагается image_one.png в активах:

import UIKit 

@IBDesignable 
class MyView: UIView { 

    @IBInspectable 
    var anImage: UIImage = UIImage(named: "image_one")! 

} 

На самом деле интерфейс строитель агент врезается в инициализации этой переменной. Если вы пишете var anImage: UIImage! = UIImage(named: "image_one"), тогда агент падает при доступе к этой переменной (как указано выше).

Любые идеи?

+0

Вы решили это? – ilan

ответ

1

Проблема в том, что пути в образах различаются в интерфейсе Builder, чем в вашем приложении, поэтому IB разыскивает нулевой образ. Вы можете исправить это с помощью опций, а затем установить изображение в инспекторе атрибутов в IB.

Вот обновленный код:

import UIKit 

@IBDesignable 
class MyView: UIView { 

    @IBInspectable 
    var anImage: UIImage? = UIImage(named: "image_one") 

} 
1

Вы не должны установить вам изображение инспектора в IB Heres решение чисто в коде.

let bundle = Bundle(for: self.classForCoder) 
image = UIImage(named: "your_image.png", in: bundle, compatibleWith: self.traitCollection)! 
self.setImage(image, for: .normal) 
Смежные вопросы