gpt4 book ai didi

cocoa - 根据 NSTextFieldCell 的编辑值更新绑定(bind)字典

转载 作者:行者123 更新时间:2023-12-03 17:37:20 25 4
gpt4 key购买 nike

我正在努力将一些古老的代码(10.2 时代)从基于 NSCoding/plist 的归档移植到使用 Core Data。我有一个带有自定义 NSTextFieldCell 的 NSOutlineView。大纲 View 绑定(bind)到 NSTreeController 以提供数据。

绑定(bind)模型如下所示:

NSTree Controller :托管对象上下文 -> Controller.managedObjectContext

NSOutlineView 的 NSTableColumn值 -> 树 Controller :arrangedObjects:itemDictionary

NSOutlineView 有一个自定义 NSTextFieldCell 子类,它在文本字段旁边添加图像,因此我将 NSManagedObject 的值作为名为 itemDictionary 的 NSMutableDictionary 传递给它,这样我就可以拉取并设置标题和 isChecked 键值。

我遇到问题的地方是更新文本字段的值并将更改后的值传递回我的托管对象实例。用户双击标题值并对其进行编辑后,它会传递给 -(id)objectValue,但我不确定下一步是将更新传播到我的 NSManagedObject实例。到目前为止,我在 NSTextFieldCell 子类中读取和设置值的代码如下:

- (void)setStringValue:(NSString *)aString {
[super setObjectValue:aString];
}

- (void)setObjectValue:(id <NSCopying>)anObject {
id cellValues = anObject;

[super setObjectValue:[cellValues valueForKey:@"title"]];
[self setCheckState:[[cellValues valueForKey:@"isChecked"] integerValue]];
}

- (id)objectValue {
return [super objectValue];
}

最佳答案

我问了一圈,这是有人给我的推荐;看起来很合理。

在您的 NSCell 子类中,在设置新值时事件循环调用的任何方法中,执行如下操作:

- (void)whateverMethodInCellSubclassIsTriggeredByEventLoop:(id)value {
NSTableView *tableView = [self controlView];
NSTableColumn *column = [[tableView tableColumns] objectAtIndex:[tableView editedColumn]];
NSInteger rowIndex = [tableView editedRow];
NSDictionary *bindingInfo = [column infoForBinding:NSValueBinding];
id modelObject = nil;

if ([controlView isKindOfClass:[NSOutlineView class]]) {
NSTreeNode *item = [outlineView itemAtRow:rowIndex];
modelObject = [item representedObject];
} else if ([controlView isKindOfClass:[NSTableView class]]) {
NSArrayController *controller = [bindingInfo objectForKey:NSObservedObjectKey];
modelObject = [[controller arrangedObjects] objectAtIndex:rowIndex];
}

[modelObject setValue:value forKeyPath:[bindingInfo objectForKey:NSObservedKeyPathKey]];
}

这是相当通用的代码,它利用表列上可用的绑定(bind)信息来获取模型对象和应将更改推送到的关键路径,并使用通用 KVC 来推送更改。它应该适用于表格和大纲 View 以及任意模型对象,无论是否为核心数据。

关于cocoa - 根据 NSTextFieldCell 的编辑值更新绑定(bind)字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/953343/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com