gpt4 book ai didi

xcode - 使用 swift 在 xcode 6 中自定义 NSValueTransformer

转载 作者:IT王子 更新时间:2023-10-29 05:15:15 26 4
gpt4 key购买 nike

有人用 swift 在 xcode 6 beta 中成功实现了自定义 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中注册这个transformer是否正确

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

有谁知道这一切应该如何运作?

亲切的问候!马丁

最佳答案

来自 Xcode 发行说明:

If you set a Swift subclass of NSValueTransformer as a binding’s value transformer, the XIB or storyboard will contain an invalid reference to the class, and the binding will not work properly at runtime. You can either enter a mangled class name into the Value Transformer field or add the @objc(…) attribute to the NSValueTransformer subclass to solve this problem. (17495784)

来自 Swift 指南:

To make your Swift class accessible and usable back in Objective-C, make it a descendant of an Objective-C class or mark it with the @objc attribute. To specify a particular name for the class to use in Objective-C, mark it with @objc(<#name#>), where <#name#> is the name that your Objective-C code will use to reference the Swift class. For more information on @objc, see Swift Type Compatibility.

解决方法:

将您的类声明为 @objc(myTransformer) class myTransformer: NSValueTransformer 然后您可以使用“myTransformer”作为名称...

关于xcode - 使用 swift 在 xcode 6 中自定义 NSValueTransformer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25534334/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com