NSArrayController NSTableView核心数据绑定整数

时间:2017-11-14 02:39:02

标签: core-data nstableview nsarraycontroller nstablecellview

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

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

在阵列控制器尝试将其保存回Core Data之前,如何将此指针字符串转换回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

2 个答案:

答案 0 :(得分:1)

init

中注册值转换器覆盖AppDelegate
override init()
{
   let stringIntegerValueTransformer = StringIntegerValueTransformer()
   ValueTransformer.setValueTransformer(stringIntegerValueTransformer, forName:NSValueTransformerName(rawValue: "StringIntegerValueTransformer"))
   super.init()
 }

并考虑文档中的这个说明

  

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

答案 1 :(得分:0)

在文本字段中添加数字格式化程序。

相关问题