NSArrayController NSTableView 核心数据绑定整数
Posted
技术标签:
【中文标题】NSArrayController NSTableView 核心数据绑定整数【英文标题】:NSArrayController NSTableView Core Data Binding integers 【发布时间】:2017-11-14 02:39:02 【问题描述】:我有一个绑定到 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
【问题讨论】:
【参考方案1】:在AppDelegate
中注册值转换器覆盖init
override init()
let stringIntegerValueTransformer = StringIntegerValueTransformer()
ValueTransformer.setValueTransformer(stringIntegerValueTransformer, forName:NSValueTransformerName(rawValue: "StringIntegerValueTransformer"))
super.init()
并考虑文档中的此注释
您的 NSValueTransformer 子类不会自动列在 Interface Builder 绑定检查器中。检查绑定时,您可以输入值转换器注册的名称,但该功能不会出现在 Interface Builder 的测试模式中。当您的应用程序编译并运行时,将使用转换器
【讨论】:
【参考方案2】:向文本字段添加数字格式化程序。
【讨论】:
以上是关于NSArrayController NSTableView 核心数据绑定整数的主要内容,如果未能解决你的问题,请参考以下文章
NSTableView 绑定到 NSArrayController