2015-09-09 84 views
11

我在自定義視圖上創建了一個@IBDesignable以從IB設置屬性。但我得到這個類是不符合編碼的關鍵值儘管我在我的班級中有這個屬性。此課程不符合編碼標準,符合@IBInspectable

@IBDesignable class ExclusiveSelectorView: UIView { 
    @IBInspectable var cellWidth: CGFloat? 
} 

無法設置(cellWidth)用戶定義的上(Test.ExclusiveSelectorView)檢查屬性:[setValue方法:forUndefinedKey:]:這個類不是密鑰值編碼兼容的關鍵cellWidth。

enter image description here

這是我 enter image description here

+0

那截屏的顯示自定義類位,是該視圖或文件所有者? –

+0

是爲視圖 – Godfather

+2

您可能需要明確定義該變量的setter和getter方法,看看這個網站http://nshipster.com/ibinspectable-ibdesignable/ –

回答

9

類不能定義爲原語爲可空@IBInspectable秒。

當您嘗試這樣做,併爲其中一個屬性值,你會在IBDesignable時間得到以下警告:

@IBDesignable class TestDesignable IB Designables: Ignoring user defined runtime attribute for key path "testInt" on instance of "TestDesignable". Hit an exception when attempting to set its value: [ setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key testInt.

並在運行時,你會得到以下錯誤:

Failed to set (testInt) user defined inspected property on (TestDesignable): [ setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key testInt.

要修復它,請將其從可選項更改爲非可選項,並將其設置爲零默認值。

無效:

@IBDesignable class TestDesignable: UIView { 
    @IBInspectable var testInt: Int? = nil // crash 
    @IBInspectable var testFloat: CGFloat? = nil // crash 
    @IBInspectable var testPoint: CGPoint? = nil // crash 
    @IBInspectable var testColor: UIColor? = nil 
} 

有效期:

@IBDesignable class TestDesignable: UIView { 
    @IBInspectable var testInt: Int = 0 
    @IBInspectable var testFloat: CGFloat = 0 
    @IBInspectable var testPoint: CGPoint = .zero 
    @IBInspectable var testColor: UIColor? = nil 
} 
+0

爲什麼'@IBInspectable var testColor:UIColor? =無'可以是零?如果在開始時你說過:「你不能將基元定義爲@IBInspectables的空值。」 –

+2

@Santiagocarmonagonzález人們通常將「價值類型」表示爲原語。 'UIColor'是一個引用類型,它可以是'nil'。總之,可設計的元素必須在Obj-C中表示,而在Obj-C中,只有引用類型可以是「nil」。 – Sulthan

+2

我會給你1億分讓我對這個超級鈍。自從迅速問世以來,我幾乎在每個項目中都遇到過這個「bug」。謝謝! – atlex2