Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa 是否可以将NSTableView的选择绑定到另一个tableview的选择?_Cocoa_Cocoa Bindings - Fatal编程技术网

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

Cocoa 是否可以将NSTableView的选择绑定到另一个tableview的选择?,cocoa,cocoa-bindings,Cocoa,Cocoa Bindings,比如说,我在核心数据的模型文件中有两个实体,一个是X公司曾经完成的所有事务。交易实体除其他财产外,还拥有一个日期财产和一对一关系公司,指明X公司与之进行特定交易的公司。另一个实体:companys当然包含所有companys的信息,X company与之进行了交易。公司实体有一对多的交易关系,这与交易实体的公司关系成反比关系 因此,在IB中,我创建了一个NSTableView,它有自己的NSArrayController,在NSPredicate的帮助下显示特定日期的所有事务 然后,我创建了另一

比如说,我在核心数据的模型文件中有两个实体,一个是X公司曾经完成的所有事务。交易实体除其他财产外,还拥有一个日期财产和一对一关系公司,指明X公司与之进行特定交易的公司。另一个实体:companys当然包含所有companys的信息,X company与之进行了交易。公司实体有一对多的交易关系,这与交易实体的公司关系成反比关系

因此,在IB中,我创建了一个NSTableView,它有自己的NSArrayController,在NSPredicate的帮助下显示特定日期的所有事务

然后,我创建了另一个表视图,在第一个表视图中显示所选交易公司的多笔交易关系,该表视图显示特定日期的交易。第二个表视图的NSArrayController绑定如下所示:

**绑定到:第一个tableview控制器的名称,控制器键:选择,模型键路径:COMPANY.TransactionCompanys实体中的多对多关系**

到目前为止,一切正常,第二个表视图显示X公司与第一个表视图中所选交易的公司之间的所有交易

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

因此,我自然应该将textfields的gp绑定到第二个表视图的控制器。但是我在第二个表视图中找到了默认选中的行。显示公司所有以前交易的行不是我在第一个表视图中为特定日期选择的交易。当然,我可以再次在第二个表视图中手动选择该事务

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

经过数小时的谷歌搜索,我通过实现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];
        }
    }
    }
}

但是,这看起来太麻烦了。。。仅通过绑定就可以完成吗?

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

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

然后将阵列控制器2的筛选器谓词绑定到阵列控制器1的选择,但使用dateFilterPredicate而不是company.transactions