cocoa - 绑定(bind)到 NSTextField 单元格不起作用,编辑值重置为默认值

标签 cocoa cocoa-bindings nstablecolumn nstableviewcell

我正在开发一个动态创建 NSTableColumns 的核心数据文档应用程序。数据单元格类型可以是复选框、 slider 等。以编程方式绑定(bind)到所有单元格类型都可以,但 NSTextFieldCell 除外。

所有NSTextFieldCells绑定(bind)失败,编辑后返回默认值。无论它们绑定(bind)到字符串、数字(应用了 NSNumberFormatter)还是日期(应用了 NSDateFormatter),都会发生这种情况。我使用以下格式来执行所有绑定(bind):

NSDictionary *textFieldOpts = [NSDictionary dictionaryWithObjectsAndKeys:@"YES", NSContinuouslyUpdatesValueBindingOption, @"YES", NSValidatesImmediatelyBindingOption, nil];
[aCell bind:@"value" toObject:[[entryAC arrangedObjects] objectAtIndex:0] withKeyPath:@"numberData" options:textFieldOpts];

同样,如果单元格类型不是 NSTextFieldCell,这些语句就会起作用。

我引入了一个 -observeValueForKeyPath 方法来记录值​​何时发生变化...对于其他单元类型(例如 NSSliderCell),我可以看到值发生变化,但对于 NSTextFieldCell,它永远不会更新。

最佳答案

事实证明,我需要实现 NSTableView 数据源方法 setObjectValue 来手动从 NSTableView(View)获取更改,然后手动设置数组 Controller (Model)中的数据,类似于下面的代码:

- (void)tableView:(NSTableView *)aTableView setObjectValue:(id)anObject forTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex {
    [[[entryAC arrangedObjects] objectAtIndex:rowIndex] setValue:(NSNumber *)anObject forKey:@"numberData"];
}

出于某种原因,当以编程方式逐个单元格设置时,与 NSTextFieldCells 的绑定(bind)只能以一种方式工作:仅显示数据。就我个人而言,我会将其归类为错误......

关于cocoa - 绑定(bind)到 NSTextField 单元格不起作用,编辑值重置为默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2548812/

相关文章:

macos - CGDisplay创建图像矩形: how to ignore a specific NSWindow

cocoa - 使用 Quartz 在屏幕上绘制

objective-c - 我应该什么时候移除观察者?在移除观察者之前释放对象时出错

xcode - 在 mac 应用程序的 NSTableView 中实现复选框

Cocoa:启动另一个应用程序的沙盒权利

objective-c - NSMenuItem 自定义 View 中的可编辑 NSTextField

objective-c - 不知道如何进行 cocoa 绑定(bind)

cocoa - NSNumberFormatter 因 nil 值而失败

cocoa - 在 NSTableView 中自动保存以编程方式创建的 NSTableColumn?