如何将 NSArrayController 的内容集绑定到多个 NSArrayController 选择?

Posted

技术标签:

【中文标题】如何将 NSArrayController 的内容集绑定到多个 NSArrayController 选择?【英文标题】:How to Bind Content Set of NSArrayController to More than One NSArrayController Selection? 【发布时间】:2011-06-27 20:34:06 【问题描述】:

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

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

这样做的最佳方法是什么,以便当我在绑定到用户控制器的 NSTableView 中单击新用户时,绑定到事务控制器的 NSTableView 中的事务会相应更改,但仍保留与在中选择的卖方相关的事务绑定到卖方控制器的 NSTableView(反之亦然)?

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

感谢任何帮助。

【问题讨论】:

【参考方案1】:

您可能会定期在 IB 中配置“TransactionsForUserAndSeller”NSArrayController,其 contentSet 绑定到 userArrayController.selection.transactions,然后使用其 filterPredicate 绑定到 SellerArrayController.selection 过滤结果,并使用返回 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]];

这将正确显示子集,但您需要编写自己的 add 方法来手动处理关系,通过 outlet 获取当前选择到卖方数组控制器。

【讨论】:

以上是关于如何将 NSArrayController 的内容集绑定到多个 NSArrayController 选择?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Core Data 设置 NSArrayController?

NSArrayController 的自动准备内容和自动重新排列对象有啥用?

如何将 NSArray 和 NSArrayController 与 Core Data 一起使用?

如何使用 NSArraycontroller 在可可上创建 NSFetchedresultController?

核心数据遍历具有 NSArrayController 内容集的实体?

实体模式下的 NSArrayController 在具有内容绑定的 NSTableView 被编辑后未更新