我正在开发一个动态创建 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/