是否有人在xcode 6测试版中成功地实现了自定义NSValueTransformer?
我有以下快速课程:
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
}
}所以这个转换器应该做的就是在gui中添加100到给定的值。
如您所见,转换器类现在出现在IB中的值转换器下拉列表中。

但是,如果我选择这个转换器,应用程序就会崩溃:
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()
}有人知道这整件事该怎么做吗?
亲切的问候!马丁
发布于 2014-09-15 20:07:04
初始化newTransformer之后,还应该包括以下行:
NSValueTransformer.setValueTransformer(newTransformer, forName: "myTransformer")然后,在Interface中,您应该在值转换器下拉列表下使用newTransformer而不是myTransformer。
发布于 2014-11-27 21:18:29
来自Xcode发行说明:
如果将NSValueTransformer的Swift子类设置为绑定的值转换器,XIB或情节提要将包含对该类的无效引用,并且绑定在运行时不能正常工作。您可以在值转换器字段中输入一个损坏的类名,也可以添加@objc(…)属性为NSValueTransformer子类来解决此问题。(17495784)
来自Swift指南:
要使Swift类在objc中可访问并可用,请将其设置为objc类的后代,或者使用@objc属性标记它。若要指定在Objective中使用的类的特定名称,请使用@objc( <#name#> )标记它,其中<#name#>是目的-C代码将用于引用Swift类的名称。有关@objc的更多信息,请参见Swift类型兼容性。
解决方案:
将类声明为@objc(myTransformer) class myTransformer: NSValueTransformer,然后可以使用"myTransformer“作为名称.
https://stackoverflow.com/questions/25534334
复制相似问题