我有一个简单的应用程序,它将NSTableView绑定到核心数据支持的NSArrayController。
应用程序在表视图中显示核心数据存储中的所有记录。
我定义了一些用户可设置的过滤器,它们在NSArrayController上设置过滤谓词。这些操作可以过滤具有标志集
的OUT记录我希望有一个仪表板,列出核心数据存储中记录的元数据,例如:
记录总数
字段激活的记录数= Y
字段激活的记录数= N
字段更新= Y
我希望这些信息是根据商店的内容计算的,而不是NSTableView的可见内容。
我遇到的问题是NSArrayController的arrangeObjects值受到过滤器应用程序的影响,因此当打开过滤器时,总记录数等内容会发生变化。
我已经搜索了很多并查看了我的各种编码书,但我无法弄清楚如何以允许我将它们绑定到IB中NSTextField的值的方式计算这些值。
非常感谢任何帮助或建议。
此致
达伦。
答案 0 :(得分:0)
为什么不创建另一个直接从Core Data堆栈计算这些值的控制器对象,并以符合KVO的方式公开它们?
答案 1 :(得分:0)
首先对您的控制器进行子类化,在本例中为NSArrayController。其次,在控制器上创建表示所需值的属性,例如:
@property(nonAtomic,retain)NSNumber * fieldActiveYes; @property(nonAtomic,retain)NSNumber * fieldActiveNo; @property(nonAtomic,retain)NSNumber * fieldChanged;
接下来,为每个属性创建一个自定义getter:
-(NSNumber *) fieldActiveYes{
// ... perform a fetch by value on the field you wish
//... set the fetch to return dictionaries only
// ... use @sum collection operator to sum the fields
return sum;
}
将UI字段的值绑定到控制器fieldActiveYes
键。当managedObjectContext更改时,它应该重新计算。如果没有,您可能需要添加一些观察。
答案 2 :(得分:0)
感谢您的回复。
最后我发现这是最简单的解决方案:
我在IB中创建了额外的NSArrayControllers(每个文本域一个),并将每个文本域的managedObjectContext绑定到主moc。
我将AC设置为实体模式,然后将每个AC的FetchPredicate设置为相关的条件。
在我的UI中,我然后将每个文本字段绑定到相关新AC的arrangeObjects @count。
此致
达伦。