objective-c - 如何将 NSArrayController 的内容集绑定(bind)到多个 NSArrayController 选择?

标签 objective-c cocoa cocoa-bindings nsarraycontroller

我是 Objective-C 的新手,到目前为止我很喜欢它。然而,我似乎在兜圈子。我试图在不编写代码的情况下做尽可能多的事情。是否可以有效地将一个 NSArrayController 的内容集绑定(bind)到其他两个 NSArrayController 的选择。

例如,我想要所选用户 (NSArrayController) 与所选卖家 (NSArrayController) 的所有交易 (NSArrayController)。然后,当我添加新交易时,它会链接到选定的用户和卖家。

最好的方法是什么,这样当我在绑定(bind)到用户 Controller 的 NSTableView 中单击新用户时,绑定(bind)到事务 Controller 的 NSTableView 中的事务会相应更改,但仍然保留与在中选择的卖家相关的事务NSTableView 绑定(bind)到 Seller Controller (反之亦然)?

我可能只需要改变我的观点,因为我习惯了生活在一个没有约束力的世界。

感谢任何帮助。

最佳答案

您可以定期在 IB 中配置“TransactionsForUserAndSeller”NSArrayController,其 contentSet 绑定(bind)到 userArrayController.selection.transactions,然后使用其绑定(bind)到 sellerArrayController.selection 的 filterPredicate 以及返回 NSPredicate 的值转换器来过滤结果。

该值转换器的实现可能如下所示:

+(Class)transformedValueClass { return [NSPredicate class]; }

+(BOOL)allowsReverseTransformation { return NO; }

-(id)transformedValue:(id)value {

    if (value == nil) return nil;

    return [NSPredicate predicateWithFormat:
            [NSString stringWithFormat:@"seller == %@", value]];
}

这将正确显示子集,但您需要编写自己的添加方法来手动处理关系,通过卖家数组 Controller 的导出获取当前选择。

关于objective-c - 如何将 NSArrayController 的内容集绑定(bind)到多个 NSArrayController 选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6498626/

相关文章:

ios - 如何通过拖放将对象添加到 UITableView 中?

ios - 自定义 uitableviewcell 与文本字段消失

objective-c - 子类的sharedClient方法

cocoa - 选择多个项目时禁用 NSButton - Cocoa Bindings

nstableview - 绑定(bind)空占位符未在基于 View 的 NSTableView 中翻译

iphone - 如何在另一个 NIB 的 View 内加载一个 NIB?

ios - Objective-C指针和swift

macos - 将 Cocoa 实用程序应用程序拆分为辅助二进制文件 + 主应用程序二进制文件的优点和缺点?

objective-c - 从不同的对象设置 NSStatusItem 工具提示

cocoa - NSTreeController 的 "arrangedObjects"到底是什么?