mar*_*hro 17 xcode nsvaluetransformer swift
有没有人用swift在xcode 6 beta中成功实现自定义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
}
}
Run Code Online (Sandbox Code Playgroud)
所以这个变压器应该做的是,在gui中给定值增加100.
如您所见,变换器类现在出现在IB中的Value Transformer下拉列表中.

但如果我选择这个变压器应用程序崩溃:
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'
Run Code Online (Sandbox Code Playgroud)
在AppDelegate中注册此变换器是否正确?
override class func initialize() {
let newTransformer = myTransformer()
}
Run Code Online (Sandbox Code Playgroud)
有谁知道这整个东西应该如何工作?
亲切的问候!马丁
use*_*500 39
来自Xcode发行说明:
如果将NSValueTransformer的Swift子类设置为绑定的值转换器,则XIB或故事板将包含对该类的无效引用,并且绑定在运行时将无法正常工作.您可以在Value Transformer字段中输入一个受损的类名,或者将@objc(...)属性添加到NSValueTransformer子类以解决此问题.(17495784)
来自Swift指南:
要使您的Swift类可以在Objective-C中访问和使用,请将其作为Objective-C类的后代或使用@objc属性进行标记.要指定要在Objective-C中使用的类的特定名称,请使用@objc(<#name#>)标记它,其中<#name#>是您的Objective-C代码将用于引用Swift类的名称.有关@objc的更多信息,请参阅Swift类型兼容性.
解:
将您的类声明为@objc(myTransformer) class myTransformer: NSValueTransformer,然后您可以使用"myTransformer"作为名称...
小智 3
初始化newTransformer后,您还应该包含以下行:
NSValueTransformer.setValueTransformer(newTransformer, forName: "myTransformer")
Run Code Online (Sandbox Code Playgroud)
然后在 Interface Builder 中,您应该在 Value Transformer 下拉列表中使用myTransformer而不是newTransformer 。
| 归档时间: |
|
| 查看次数: |
5076 次 |
| 最近记录: |