NSTableView 不会在编辑时更新值
NSTableView doesn't update values on edit
我的应用程序中有一个基于单元格的 NSTableView,绑定到一个 [String, NSNumber] 数组。我已经在 IB 中打开编辑并添加了一个委托方法:
func tableView(tableView: NSTableView, setObjectValue anObject: AnyObject?, forTableColumn tableColumn: NSTableColumn?, row rowIndex: Int) {
guard var d = deck?.geometryCards[rowIndex].data else { return }
guard let i = tableColumn?.identifier where i.length > 0 else { return }
let key = i.substring(0, length:(i.length - "Column".length))
print("before setting " + String(d[key]))
if key[0] == "F" {
d[key] = NSNumber(double: Double((anObject as? String)!)!)
} else if key[0] == "I" {
d[key] = NSNumber(int: Int32((anObject as? String)!)!)
}
print("after setting " + String(d[key]))
}
当我单击单元格并更改其值时,我看到...
before setting Optional(-1.1562)
after setting Optional(5.5)
太棒了!唯一的问题是 NSTableView 中的值没有改变,它 returns 变为 1.1562。如果我再次进行编辑,我会得到...
before setting Optional(-1.1562)
after setting Optional(5.5)
我在事件链中遗漏了一些东西,该值正在进入字典但随后在某处被重置?
问题是 Swift 字典是值类型。当您将字典分配给另一个变量时,您会得到一个副本。您的变量 d
是字典的副本,而不是原始字典。所以你修改的是副本,而不是原始词典。
如果您 geometryCards
中的卡片是对象而不是结构,这应该有效:
func tableView(tableView: NSTableView, setObjectValue anObject: AnyObject?, forTableColumn tableColumn: NSTableColumn?, row rowIndex: Int) {
guard let c = deck?.geometryCards[rowIndex] else { return }
guard let i = tableColumn?.identifier where i.length > 0 else { return }
let key = i.substring(0, length:(i.length - "Column".length))
print("before setting " + String(c.data[key]))
if key[0] == "F" {
c.data[key] = NSNumber(double: Double((anObject as? String)!)!)
} else if key[0] == "I" {
c.data[key] = NSNumber(int: Int32((anObject as? String)!)!)
}
print("after setting " + String(c.data[key]))
}
我的应用程序中有一个基于单元格的 NSTableView,绑定到一个 [String, NSNumber] 数组。我已经在 IB 中打开编辑并添加了一个委托方法:
func tableView(tableView: NSTableView, setObjectValue anObject: AnyObject?, forTableColumn tableColumn: NSTableColumn?, row rowIndex: Int) {
guard var d = deck?.geometryCards[rowIndex].data else { return }
guard let i = tableColumn?.identifier where i.length > 0 else { return }
let key = i.substring(0, length:(i.length - "Column".length))
print("before setting " + String(d[key]))
if key[0] == "F" {
d[key] = NSNumber(double: Double((anObject as? String)!)!)
} else if key[0] == "I" {
d[key] = NSNumber(int: Int32((anObject as? String)!)!)
}
print("after setting " + String(d[key]))
}
当我单击单元格并更改其值时,我看到...
before setting Optional(-1.1562)
after setting Optional(5.5)
太棒了!唯一的问题是 NSTableView 中的值没有改变,它 returns 变为 1.1562。如果我再次进行编辑,我会得到...
before setting Optional(-1.1562)
after setting Optional(5.5)
我在事件链中遗漏了一些东西,该值正在进入字典但随后在某处被重置?
问题是 Swift 字典是值类型。当您将字典分配给另一个变量时,您会得到一个副本。您的变量 d
是字典的副本,而不是原始字典。所以你修改的是副本,而不是原始词典。
如果您 geometryCards
中的卡片是对象而不是结构,这应该有效:
func tableView(tableView: NSTableView, setObjectValue anObject: AnyObject?, forTableColumn tableColumn: NSTableColumn?, row rowIndex: Int) {
guard let c = deck?.geometryCards[rowIndex] else { return }
guard let i = tableColumn?.identifier where i.length > 0 else { return }
let key = i.substring(0, length:(i.length - "Column".length))
print("before setting " + String(c.data[key]))
if key[0] == "F" {
c.data[key] = NSNumber(double: Double((anObject as? String)!)!)
} else if key[0] == "I" {
c.data[key] = NSNumber(int: Int32((anObject as? String)!)!)
}
print("after setting " + String(c.data[key]))
}