我正在驱动人员实体表。
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
我尝试过:
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的“仅组”实体...
答案 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部分中的项目数。以常规方式在该部分中创建行。