首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >计算应用了filterPredicate的NSArrayController中某些记录的行数

计算应用了filterPredicate的NSArrayController中某些记录的行数
EN

Stack Overflow用户
提问于 2011-03-16 08:29:02
回答 3查看 503关注 0票数 0

我有一个简单的应用程序,它有一个绑定到核心数据支持的NSArrayController的NSTableView。

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

我定义了一些用户可设置的筛选器,用于在NSArrayController上设置筛选器谓词。它们的作用类似于过滤出设置了标志的记录

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

记录总数

字段有效的记录数=Y

字段有效的记录数=N

字段更新的记录数=Y

我希望这些信息是根据商店的内容计算的,而不是NSTableView的可见内容。

我遇到的问题是,NSArrayController的arrangedObjects值受过滤器应用程序的影响,因此当过滤器打开时,诸如记录总数之类的内容会发生变化。

我在谷歌上搜索了很多,并查阅了我的各种编码书籍,但我不知道如何计算这些值,以便将它们绑定到IB中的NSTextField的值。

如有任何帮助或建议,将不胜感激。

问候

达伦。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-03-18 03:48:37

谢谢你的回复。

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

我在IB中创建了额外的NSArrayControllers (每个文本字段一个),并将每个文本字段的managedObjectContext绑定到主moc。

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

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

问候

达伦。

票数 0
EN

Stack Overflow用户

发布于 2011-03-16 17:46:29

为什么不创建另一个控制器对象,直接从Core Data堆栈计算这些值,并以符合KVO的方式公开它们呢?

票数 0
EN

Stack Overflow用户

发布于 2011-03-17 04:17:41

首先子类化你的控制器,在本例中是NSArrayController。其次,在控制器上创建表示您希望的值的属性,例如:

@property (nonAtomic,retain) NSNumber *fieldActiveYes;@property (nonAtomic,retain) NSNumber *fieldActiveNo;@property (nonAtomic,retain) NSNumber *fieldChanged;

接下来,为每个属性创建一个自定义的getter:

代码语言:javascript
运行
复制
-(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改变时,它应该重新计算。如果不是,您可能需要添加一些观察。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5319690

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档