2014-08-27 29 views
16

是否有人使用swift在xcode 6 beta中成功實現了自定義NSValueTransformer?在xcode 6中使用swift自定義NSValueTransformer

我有以下SWIFT類:

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

所以這一切的變壓器應該做的是,加入100在GUI中的給定值。

如您所見,變壓器類現在出現在IB的值轉換器下拉列表中。

enter image description here

但是,如果我選擇了這個變壓器的應用程序崩潰:

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' 

是不是在AppDelegate中註冊該變壓器

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

有誰知道這是如何整個東西應該工作?

親切的問候! 馬丁

+0

我想這是一個迅速的名字搗亂。嘗試用@objc聲明它來解決這個問題。 – 2014-08-27 22:13:09

回答

3

後您初始化newTransformer你還應該包括行:

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

然後在你的界面生成器,你應該值轉換器下拉菜單下使用myTransformer代替newTransformer的。

+0

這不是最好的答案。 – ioquatix 2016-02-11 11:25:09

+0

請閱讀下面的答案! – 2017-03-21 04:19:56

33

在Xcode發佈說明:

如果設置NSValueTransformer的斯威夫特子類作爲一個綁定的值 互感器,廈門國際銀行或故事板將包含一個無效引用 的類,並且綁定將無法正常工作在運行時正確。您 可以將損壞的類名稱輸入到值轉換器字段 或將@objc(...)屬性添加到NSValueTransformer子類 解決此問題。 (17495784)

從斯威夫特指南:

爲了讓您的斯威夫特類訪問和使用回用Objective-C, 使它成爲一個Objective-C類的後裔或有該標誌它@ objc 屬性。要爲類指定一個特定的名稱,在Objective-C中使用@objc(<#name#>)標記它,其中<#name#>名稱爲 您的Objective-C代碼將用於引用Swift類。有關@objc的更多信息,請參閱 ,請參閱Swift類型兼容性。

解決方案:

聲明類爲@objc(myTransformer) class myTransformer: NSValueTransformer,然後你可以使用 「myTransformer」 作爲名稱...

+0

這固定了我的一切。另一個很有用的資源--NNSValueTransformer的NSHipster文章:http://nshipster.com/nsvaluetransformer/ – 2015-03-24 14:51:36

+0

謝謝你的完美答案! – Satachito 2016-03-26 08:39:20

+0

我剛要投票,並意識到我已經有一段時間了。 ++ 2 – 2016-07-30 14:56:52

相關問題