2015-09-09 16 views
11

ile kodlama uyumlu anahtar değer değil. Bir özelliği IB'den ayarlamak için özel bir görünümde @IBDesignable oluşturdum. Ama bu sınıfın benim sınıfımda bu özelliklere sahip olmasına rağmen kod değeri uyumlu değil. Bu sınıf, @IBInspectable

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

(Test.ExclusiveSelectorView) üzerine (cellWidth) kullanıcı tanımlı kontrol özelliğini ayarlamak için başarısız oldu: [setValue: forUndefinedKey:]: bu sınıf temel cellWidth kodlayan uyumlu anahtar bir değer değildir.

enter image description here

Ve bu Sen @IBInspectable s için Nullable ilkeller tanımlayamazsınız benim sınıf enter image description here

+0

özel sınıf biraz gösterir Yani ekran resmi, yani görünümü için veya dosya sahibi için? –

+0

görünüm içindir – Godfather

+2

Değişken için ayarlayıcı ve getter yöntemlerini açıkça tanımlamanız gerekebilir, bu siteye göz atın http://nshipster.com/ibinspectable-ibdesignable/ –

cevap

9

olduğunu. Bunu yapmaya çalışırsanız ve bu özelliklerin biri için değerini ayarladığınızda

, sen IBDesignable anda aşağıdaki uyarıyı alırsınız:

@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.

Ve zamanında

, aşağıdaki hatayı alırsınız :

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

, bunu düzeltmek isteğe bağlı olmayan için isteğe bağlı olarak değiştirin ve bunu bazı sıfır varsayılan değeri vermek.

Geçersiz:

@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 
} 

Geçerli:

@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

Neden @IBInspectable var testColor: UIColor? = nil 'nil olabilir? Eğer başlangıçta dediyseniz: "İlkelleri @IBInspectables için null olarak tanımlayamazsınız." –

+2

@ Santiagocarmonagonzález İnsanlar genellikle "değer türleri" ni ilkel olarak gösterir. "UIColor" bir referans türüdür, 'nil' olabilir. Kısacası, tasarım öğeleri Obj-C'de temsil edilebilmeli ve Obj-C'de sadece referans türleri 'nil' olabilir. – Sulthan

+2

Bu süper körlüğü benim için 100 milyon puan veririm. Bu "hata" ile karşılaştım, hemen çıktığı günden beri üstlendiğim her projede. Teşekkürler! – atlex2

İlgili konular