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

发布于 2024-11-17 16:10:22 字数 440 浏览 1 评论 0原文

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

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

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

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

感谢任何帮助。

I am new to Objective-C, and I love it so far. However, I seem to be running in circles. I am trying to do as much as possible without writing code. Is it possible to effectively bind the Content Set of one NSArrayController to the selections of two other NSArrayControllers.

For example, I want all of the Transactions (NSArrayController) for the selected User (NSArrayController) with selected Seller (NSArrayController). Then when I add new transaction it links to the selected user and seller.

What is the best way to do that so that when I click a new User in an NSTableView bound to the User Controller, the Transactions in an NSTableView bound to a Transactions controller change accordingly but still retain Transactions related to the Seller selected in an NSTableView bound to a Seller controller (and vice versa)?

I may just need to change my perspective since I am used to living in a non-binding world.

Appreciate any help.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

心房的律动 2024-11-24 16:10:22

您可以定期在 IB 中配置“TransactionsForUserAndSeller”NSArrayController,其 contentSet 绑定到 userArrayController.selection.transactions,然后使用绑定到 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]];
}

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

You might regularly configure in IB a "TransactionsForUserAndSeller" NSArrayController with its contentSet bound to userArrayController.selection.transactions then filter the results using its filterPredicate bound to sellerArrayController.selection with a value transformer that returns an NSPredicate.

That value transformer’ implementation might look like this:

+(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]];
}

This would show the subset correctly but you need to write your own add method to handle the relationships manually, getting the current selection through an outlet to the seller array controller.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文