如何将 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?