0

我有一个绑定到 NSArrayController 的 NSTableView,而后者又绑定到 Core Data。该表很好地显示了核心数据中的整数值,但如果我编辑表中的数字,则会出现错误:

Unacceptable type of value for attribute: property = "armorclass"; desired type = NSNumber; given type = NSTaggedPointerString; value = 10.

关于如何在数组控制器尝试将其保存回核心数据之前将此指针字符串转换回 Int16 的任何建议?

我写了以下 ValueTransformer 但它不能正常工作。我总是收到错误:找不到名称为 StringIntegerValueTransformer 的值转换器

class StringIntegerValueTransformer: ValueTransformer {

    override class func transformedValueClass() -> AnyClass { //What do I transform
        return String.self as! AnyClass
    }

    override class func allowsReverseTransformation() -> Bool { //Can I transform back?
        return false
    }

    override func transformedValue(_ value: Any?) -> Any? {
        if let val = value {
            return String(describing: val)
        }
        return "nil"
    }

    override func reverseTransformedValue(_ value: Any?) -> Any? { //Revert transformation
        if let val = value {
            return val as? Int16
        }
        return nil
    }
}

fff

4

2 回答 2

1

init在_AppDelegate

override init()
{
   let stringIntegerValueTransformer = StringIntegerValueTransformer()
   ValueTransformer.setValueTransformer(stringIntegerValueTransformer, forName:NSValueTransformerName(rawValue: "StringIntegerValueTransformer"))
   super.init()
 }

并考虑文档中的这个注释

您的 NSValueTransformer 子类不会自动列在 Interface Builder 绑定检查器中。检查绑定时,您可以输入值转换器注册的名称,但该功能不会出现在 Interface Builder 的测试模式中。当您的应用程序编译并运行时,将使用转换器

于 2017-11-14T05:43:52.557 回答
0

将数字格式化程序添加到文本字段。

于 2017-11-14T16:52:30.337 回答