在Swift中添加ValueTransformer

时间:2017-03-06 17:57:54

标签: swift xcode cocoa binding

我想将ValueTransformer添加到cocoa绑定中。 我创建了一个ValueTransformer类,但它在IB中不可见。 当在IB中添加为ValueTransformer时,应用程序将在开始时崩溃

.range("C10:C25").formula = _
    "=SUMIF('Site Data '!$CR:$CR, $B$1, INDEX('Site Data '!$CU:$DJ, 0, ROW(1:1)))"
  

无法找到名称为myTransformer的值变换器

我错过了什么吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

首先,将值转换器名称注册到NSValueTransformerName。

extension
NSValueTransformerName {
    static let myTransformerName = NSValueTransformerName( rawValue: "myTransformer")
}

然后在程序的最开始即AppDelegate的初始化程序中注册值转换器。

@NSApplicationMain class
AppDelegate: NSObject, NSApplicationDelegate {
    override
    init() {
        super.init()
        ValueTransformer.setValueTransformer( myTransformer(), forName: .myTransformerName )
    }
}

https://developer.apple.com/documentation/foundation/valuetransformer

答案 1 :(得分:0)

您需要在初始化代码中将值转换器类添加到控制器类。 然后,您将在界面构建器中的正确位置找到您的值变换器。它将在Interface Builder之后立即显示:

您需要以正确的方式编写值转换器。 Check this out

enter image description here

Docs:

  

值变换器通常由应用程序的委托类注册,以响应接收initialize:class消息。这允许在应用程序启动过程的早期进行注册,从而在nib文件加载时提供对值转换器的访问。

希望它有所帮助。