【问题标题】:Calculate row counts for certain records in NSArrayController with filterPredicate applied应用 filterPredicate 计算 NSArrayController 中某些记录的行数
【发布时间】:2011-03-18 03:48:36
【问题描述】:

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

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

我定义了一些用户可设置的过滤器,它们在 NSArrayController 上设置过滤器谓词。这些会做一些事情,比如过滤掉设置了标志的记录

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

记录总数
字段活动 = Y
的记录数 字段活动 = N
的记录数 字段更新的记录数 = Y

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

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

我在 Google 上搜索了很多,并查看了我的各种编码书籍,但我无法弄清楚如何计算这些值,以便我可以将它们绑定到 IB 中的 NSTextField 的值。

非常感谢任何帮助或建议。

问候

达伦。

【问题讨论】:

    标签: objective-c cocoa core-data nsarraycontroller


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      首先子类化你的控制器,在本例中为 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 改变时,它应该重新计算。如果没有,您可能需要添加一些观察。

      【讨论】:

        【解决方案3】:

        感谢您的回复。

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

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

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

        然后,在我的 UI 中,我将每个文本字段绑定到相关新 AC 的排列对象 @count。

        问候

        达伦。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-12-10
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多