首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >xcode 6中的自定义NSValueTransformer

xcode 6中的自定义NSValueTransformer
EN

Stack Overflow用户
提问于 2014-08-27 18:17:41
回答 2查看 5.6K关注 0票数 17

是否有人在xcode 6测试版中成功地实现了自定义NSValueTransformer?

我有以下快速课程:

代码语言:javascript
复制
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中的值转换器下拉列表中。

但是,如果我选择这个转换器,应用程序就会崩溃:

代码语言:javascript
复制
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中注册此变压器是否正确?

代码语言:javascript
复制
override class func initialize() {
  let newTransformer = myTransformer()
}

有人知道这整件事该怎么做吗?

亲切的问候!马丁

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-15 20:07:04

初始化newTransformer之后,还应该包括以下行:

代码语言:javascript
复制
NSValueTransformer.setValueTransformer(newTransformer, forName: "myTransformer")

然后,在Interface中,您应该在值转换器下拉列表下使用newTransformer而不是myTransformer

票数 2
EN

Stack Overflow用户

发布于 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“作为名称.

票数 41
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25534334

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档