2014-08-27 26 views
16

Herkes, hızlı bir şekilde xcode 6 beta'da özel bir NSValueTransformer uygulamasını başarıyla uyguladı mı? Arabirimdeki belirli bir değerine 100 eklenmesi, Xcode 6'daki özel NSValueTransformer, hızlı

import Foundation 

class myTransformer: NSValueTransformer { 

    let amount = 100 

    override class func transformedValueClass() -> AnyClass! 
    { 
    return NSNumber.self 
    } 

    override func transformedValue(value: AnyObject!) -> AnyObject! { 
    return value.integerValue + amount 
    } 
} 

Yani bütün transformatör yapmalıyım

geçerli:

Aşağıdaki hızlı dersim var.

Gördüğünüz gibi, trafo sınıfı şimdi IB'de Değerli Trafo'da açılır.

enter image description here

Ama bu transformotörünün ile uygulama çöker seçerseniz:

2014-08-27 20:12:17.686 cdTest[44134:303] 
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', 
reason: 'Cannot find value transformer with name newTransformer' 

doğru herkes nasıl biliyor mu

override class func initialize() { 
    let newTransformer = myTransformer() 
} 

ile AppDelegate bu trafo kayıt mı tüm şeyler çalışmalı?

Saygılarımızla! martin

+0

Bu hızlı ad mangling olduğunu tahmin ediyorum. Bunun için @objc ile bildirmeyi deneyin. –

cevap

3

ayrıca çizgi içermelidir sen newTransformer initialize sonra:

NSValueTransformer.setValueTransformer(newTransformer, forName: "myTransformer") 

Sonra Interface Builder Eğer Değer Trafo açılır menüsü altında newTransformer yerine
myTransformer kullanmalıdır.

Xcode sürüm notları itibaren
+0

Bu en iyi cevap değil. – ioquatix

+0

aşağıdaki cevabı okuyun! –

33

: Bir sitesinin bağlama değeri transformatör gibi NSValueTransformer bir Swift alt sınıfını ayarlarsanız

, XIB veya film şeridi sınıfına geçersiz başvuru içerir ve çalışmaz bağlayıcı olacak çalışma zamanında düzgün. , Değer Trafo Alanı alanına bir karışık sınıf adı girebilir veya bu sorunu çözmek için NSValueTransformer alt sınıfına @objc (…) özniteliğini olarak ekleyebilirsiniz. (17495784) Swift rehber itibaren

:

geri Objective-C içinde Swift sınıf erişilebilir ve kullanılabilir hale getirmek için, bunu bir Objective-C sınıfının soyundan yapmak veya birlikte işaretlemek @ objc özniteliği. Objective-C'de kullanılacak sınıf için belirli bir ad belirtmek üzere, @objc (< # name #>) ile işaretleyin, burada < # name #> Objective-C kodunuzun başvurmak için kullanacağı adıdır. Swift sınıfı. için @objc hakkında daha fazla bilgi için bkz. Hızlı Tip Uyumluluğu.

Çözüm:

@objc(myTransformer) class myTransformer: NSValueTransformer olarak sınıfı bildirme ve sonra adı olarak "myTransformer" kullanabilirsiniz ...

+0

Bu benim için her şeyi sabitledi. NSValueTransformer ile ilgili NSHipster makalesi: http://nshipster.com/nsvaluetransformer/ –

+0

Mükemmel bir cevap için teşekkür ederiz! – Satachito

+0

Bu oylamayı hemen yapmak üzereydim ve geçmişte zaten yaşadığımın farkına vardım. ++ 2 –