是否可以将NSTableView的选择绑定到另一个tableview的选择?

时间:2011-02-02 13:23:48

标签: cocoa cocoa-bindings

Screenshot

很快,我在Core Data的Model文件中有2个实体,其中一个是X公司所做的所有“交易”。 “交易”实体具有其他属性,“DATE”属性和一对一关系“COMPANY”(指定X公司与该特定交易进行的公司)。另一个实体:“公司”当然包含X公司已完成交易的所有公司信息。 “公司”实体具有多对多关系“交易”,这与“交易”实体的“公司”关系呈反比关系。

因此,在IB中,我创建了一个NSTableView(带有自己的NSArrayController),显示了特定日期的所有交易(在NSPredicate的帮助下)。

然后我创建另一个表视图,显示第一个表视图中所选事务的公司的多对多关系“TRANSACTIONS”(显示特定日期的事务)。第二个表视图的NSArrayController绑定是这样的:

**绑定到:“第一个tableview控制器的名称”,Controller Key:选择,Model Key Path:COMPANY.TRANSACTIONS(“公司”实体中的to-many关系)**

到目前为止,Everythings工作正常,第二个tableview显示了X公司在第一个表格视图中与所选交易的公司所做的所有交易。

但我有一组文本字段显示特定交易的详细信息。将这些文本字段与第一个表视图的控制器(显示特定日期的事务的控制器)绑定非常简单。 但我想做的是: 1 /在第一个表视图中查找特定日期的事务,选择其中任何一个 2 /然后,从第二个表视图中检查该事务的公司的所有先前事务(在第一个表视图中选择) 3 /选择任何先前的交易,并从该组文本字段中检查交易的详细信息

所以很自然我应该将textfields的gp绑定到第二个表视图的控制器。但我发现第二个表视图中的默认选定行(显示公司以前的所有事务)都不是我在第一个tableView中为特定日期选择的事务。当然,我可以再次在第二个表视图中手动选择该事务....

所以我只想知道是否有可能让第二个表视图根据我在第一个表视图中选择的事务自动选择事务thr thr ??

经过数小时的谷歌搜索,我通过实现tableview委托协议解决了这个问题:

    - (void)tableViewSelectionDidChange:(NSNotification *)aNotification { 
if (["nameOf1stTableView" selectedRow] > -1) {
    NSArray *objsArray = ["nameOf2ndTableView'sController" arrangedObjects];
    for (id obj in objsArray) {
        if ([[obj valueForKey:@"DATE"] isEqualToDate: ["nameOf1stTableView'sController".selection valueForKey:@"DATE"]]) {
            ["nameOf2ndTableView" selectRowIndexes:[NSIndexSet indexSetWithIndex:[objsArray indexOfObject:obj]] byExtendingSelection:NO];
        }
    }
    }

}

但是,这看起来太麻烦了......可以单独使用绑定吗?

1 个答案:

答案 0 :(得分:0)

dateFilterPredicate模型对象添加一个临时属性Transaction,该对象提供一个谓词,用于选择相关的事务 - 当Transaction的实例时,您希望在表视图#2中显示的事务在表视图#1中选择。

您需要为事务日期实现自定义setter,以便在对象的事务日期更改时更新谓词。您还需要在awakeFromFetch中设置它(不会调用setTransactionDate)。

然后将数组控制器2的过滤谓词绑定绑定到数组控制器1的selection,而不是company.transactions,而是使用dateFilterPredicate