2011-03-16 73 views
0

我有一个简单的应用程序,它具有绑定到核心数据支持的NSArrayController的NSTableView。计算应用了filterPredicate的NSArrayController中某些记录的行数

应用程序显示表视图中核心数据存储的所有记录。

我有一些用户可设置的过滤器定义,它在NSArrayController上设置过滤器谓词。这些不喜欢的东西已经设置标志

过滤掉的记录

我想有一个仪表板,列出有关的核心数据存储的记录元数据,例如:记录
一些

总数记录,其中场活性= Y
数量的记录,其中场活性= N
数量的记录,其中场更新= Y

我想在商店,而不是NSTableView的可见内容的内容计算出的该信息。

我遇到的问题是NSArrayController的arrangedObjects值受过滤器的应用程序的影响,所以当过滤器打开时,总记录数等变化。

我已经Google搜索了很多并查看了我的各种编码书籍,但我无法计算出如何计算这些值的方式,以便我们将它们绑定到IB中的NSTextField的值。

任何帮助或建议将非常感激。

Regards

Darren。

回答

0

感谢您的回复。

最后,我发现这是最简单的解决方案:

我在IB创建附加NSArrayControllers(每个文本框),并结合每一个的managedObjectContext到主MOC。

我将AC设置为实体模式,然后将每个的FetchPredicate设置为相关的条件。

在我的UI中,我将每个文本字段绑定到相关新AC的arrangeObjects @count。

Regards

Darren。

0

为什么不创建另一个控制器对象直接从核心数据堆栈计算这些值,并以KVO兼容的方式公开它们?

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改变时,它应该重新计算。如果没有,你可能需要添加一些观察。