我有一个简单的应用程序,它有一个绑定到核心数据支持的NSArrayController的NSTableView。
应用程序在表视图中显示核心数据存储中的所有记录。
我定义了一些用户可设置的筛选器,用于在NSArrayController上设置筛选器谓词。它们的作用类似于过滤出设置了标志的记录
我希望有一个仪表板,列出关于核心数据存储中记录的元数据,例如:
记录总数
字段有效的记录数=Y
字段有效的记录数=N
字段更新的记录数=Y
我希望这些信息是根据商店的内容计算的,而不是NSTableView的可见内容。
我遇到的问题是,NSArrayController的arrangedObjects值受过滤器应用程序的影响,因此当过滤器打开时,诸如记录总数之类的内容会发生变化。
我在谷歌上搜索了很多,并查阅了我的各种编码书籍,但我不知道如何计算这些值,以便将它们绑定到IB中的NSTextField的值。
如有任何帮助或建议,将不胜感激。
问候
达伦。
发布于 2011-03-18 03:48:37
谢谢你的回复。
最后,我发现这是最简单的解决方案:
我在IB中创建了额外的NSArrayControllers (每个文本字段一个),并将每个文本字段的managedObjectContext绑定到主moc。
我将ACs设置为实体模式,然后将每个的FetchPredicate设置为相关的条件。
在我的UI中,我将每个文本字段绑定到相关新AC的arrangedObjects @count。
问候
达伦。
发布于 2011-03-16 17:46:29
为什么不创建另一个控制器对象,直接从Core Data堆栈计算这些值,并以符合KVO的方式公开它们呢?
发布于 2011-03-17 04:17:41
首先子类化你的控制器,在本例中是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改变时,它应该重新计算。如果不是,您可能需要添加一些观察。
https://stackoverflow.com/questions/5319690
复制相似问题