objective-c - Cocoa 绑定(bind) - NSTableView - 交换值

标签 objective-c cocoa nstableview cocoa-bindings nsvaluetransformer

NSValueTransform 子类是将 Core Data 属性显示到 UI View 中的不错选择,显示:

  1. 将数字字符串(如(0,1,2,3等)转换为字符串(如(待处理、已完成、卡住、进行中等))
  2. 将 (0,1) 等数字字符串插入基于应用的图像(如果为 0,则为 red.png,如果为 1,则为 green.png)

以下是 Core Data 显示的两个属性:计时器和状态:

enter image description here

这是我想要显示的内容,而不更改核心数据中的值:

enter image description here

如果不使用 NSValueTransformer,还有什么其他方式可以实现?

我不想看到数据永久转换,只是为了减少核心数据中存储的数据和更好的 UI View 项。

我还尝试修改托管对象类中的属性(没有 KVO 通知),但没有成功。

最佳答案

是的,NSValueTransformer 子类可以很好地实现此目的。

您还可以向托管对象类添加只读计算属性,这也应该有效。如果这些属性作为模型代码的一部分没有意义,甚至可以通过 Controller 代码中的类别添加它们。

例如:

+ (NSSet*) keyPathsForValuesAffectingStatusDisplayName
{
    return [NSSet setWithObject:@"status"];
}
- (NSString*) statusDisplayName
{
    NSString* status = self.status;
    if ([status isEqualToString:@"0"])
        return @"Pending";
    else if ([status isEqualToString:@"1"])
        return @"Completed";
    // ...
}

+keyPathsForValuesAffectingStatusDisplayName 方法让 KVO 和绑定(bind)知道,当 status 发生变化时,这个新的 statusDisplayName 属性也会发生变化。请参阅 +keyPathsForValuesAffectingValueForKey: 的文档,了解其工作原理。

关于objective-c - Cocoa 绑定(bind) - NSTableView - 交换值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29089466/

相关文章:

html - iOS WebView控件的HTML中的音频不起作用

ios - 自定义 uicollectionview - 传递数据

objective-c - 如何为 objective-c /cocoa mac osx 应用程序实现试用期?

objective-c - 使用 Objective-C/Cocoa 的 AWS 身份验证

objective-c - NSOutlineView 模仿 Photoshop 图层面板

objective-c - 将 NSString 与整数连接 - ARC 错误

iphone - Clang 静态分析器是否足够?

objective-c - 在 Cocoa/Objective-C 中创建看门狗的原因和方法

Cocoa:对使用 CoreData 和 Bindings 与 UI 对象交互感到困惑

cocoa - NSMutableArray 中的记录未排序