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

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

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

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

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

感谢任何帮助。

【问题讨论】:

    标签: objective-c cocoa cocoa-bindings nsarraycontroller


    【解决方案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 获取当前选择到卖方数组控制器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多