核心数据组取决于属性?

时间:2018-08-23 19:40:03

标签: ios swift core-data

我正在驱动人员实体表。

Person实体可能具有boolean属性,出于这个问题的考虑,我将其称为“ group”。

Person实体在系统(Int64)中也具有唯一标识符。用户的情况是,可以在应用程序上将一个Person多次添加到任意列表中,但是,例如,如果在列表中找到了4个确切的Person(按id)对象,并且布尔组== true,我希望表格仅显示该人的一个单元格。

Person:
  identifier:Int64
  group:Bool [if true, do show only one cell for Persons with that identifier and show a count]

我想知道是否有一种方法可以建立谓词,从而允许我仅对具有== true分组的人员显示一个单元格。

这将使我能够显示类似下面的图像。 多次在列表中但具有组== true的任何人实体将仅显示一次(一个单元格),并显示该单元格上的计数。

如何在Core Data中完成此任务?只是判断的前提?

我正在考虑可能必须使用NSExpression,但是,我不确定如何完成此操作。

那么这是正确的问题吗??: load all Persons and group those that have group == true by its identifier

enter image description here

我尝试过:

load all Persons but group only those that have group == 1 by its identifier

    let fr = NSFetchRequest<NSDictionary>(entityName:"Person")
    fr.resultType = .dictionaryResultType

    fr.propertiesToGroupBy = ["identifier"]
    fr.propertiesToFetch = ["identifier"]

    do {
        let persons = try ctx.fetch(fr)
        print("persons: \(persons)")

    } catch {

    }

日志:

persons: [{
    identifier = 1;
}, {
    identifier = 2;
}]

因此,我不知道如何应用具有组== true的“仅组”实体...

1 个答案:

答案 0 :(得分:1)

不确定这与您需要的距离有多近,但我会尝试以下操作:

1布尔属性替换为public static void main(String[] args) { Apside t = new Apside(); ArrayList<Integer> a = new ArrayList<Integer>(); a.add(1); a.add(2); a.add(3); a.add(4); System.out.println(t.partition(a, 1)); } public ArrayList<ArrayList> partition(ArrayList<Integer> l, int n) { ArrayList<ArrayList> al = new ArrayList(); for (int i = 0; i < n; i++) { for (int j = 0; j < l.size(); j++) { for(int k =0; k<n; k++){ ArrayList<Integer> list = new ArrayList(n); int b = l.get(j); list.add(b); al.add(list); } } } return al; } 属性。如果对象应该是组的一部分,请将group设置为等于groupID。如果不应该将对象分组,请将groupID保留为零。

使用fetchedResultsController来获取对象,使用identifier对对象进行排序,并将其用作FRC的groupID。因此,FRC将为每个groupID创建一个节,并在节中具有相应数量的对象(以您的计数为准)。对于sectionNameKeyPath等于nil的那些对象,还将有一个部分,其中包含所有不应分组的对象。

在tableView数据源方法中,将所有非groupID为非{n}的节的numberOfRowsInSection设置为1,并为这些节使用单元格显示相关名称和计数中的项目数部分。对于groupID为零的部分,将numberOfRowsInSection设置为FRC部分中的项目数。以常规方式在该部分中创建行。