【发布时间】:2019-08-15 19:59:25
【问题描述】:
我有 NSManagedObject 数据模型 ExerciseEntity 也有数据模式 MuscleEntity。我可以通过exercise.muscle访问肌肉对象
我添加了CoreStore 监视器来观察数据模型的变化。
typealias ListEntityType = ExerciseEntity
var monitor = CoreStore.monitorSectionedList(
From<ListEntityType>()
.sectionBy(#keyPath(ListEntityType.muscle.name)) { (sectionName) -> String? in
return "\(String(describing: sectionName)) years old"
}
.orderBy(.ascending(\.name))
)
我希望得到所有部分的结果,这些部分是我的肌肉名称,并且每个部分都按顺序排列了练习,例如:
Abs section
1 exercise abs
2 exercise abs
Arms section
01 exercise arms
02 exercise arms
预期结果监视器为我返回交换结果,因为 01 和 02 字符串是
Abs section
01 exercise arms
02 exercise arms
Arms section
1 exercise abs
2 exercise abs
我只是希望这个升序规则在部分内部应用,而不是整个列表。
我已经打印了监视器:
(lldb) po monitor
(CoreStore.ListMonitor<Stacked.ExerciseEntity>) (
.isPendingRefetch = false;
.numberOfObjects = 140;
.sections = 16 item(s) [
0 = "Abs" (
.numberOfObjects = 13;
.indexTitle = "Optional("Abs") years old";
);
1 = "Arms" (
.numberOfObjects = 1;
.indexTitle = "Optional("Arms") years old";
);
如您所见,第 0 部分是 Abs,第 1 部分是手臂,好吧,让我们看看对象:
print("Section group name: ", monitor.sectionInfo(at: 0).name)
for e in monitor.objects(in: 0) {
print("Exercis name", e.name!, " Should connected to section named:", e.muscle!.name!)
}
print("Section group name: ", monitor.sectionInfo(at: 1).name)
for e in monitor.objects(in: 1) {
print("Exercis name", e.name!, " Should connected to section named:", e.muscle!.name!)
}
如果您不想阅读所有输出,您会注意到第一个练习与 Arms 相关联,但它以某种方式出现在 Abs 部分。
Section group name: Abs
Exercis name 1111 Should connected to section named: Arms
完整输出:
Section group name: Abs
Exercis name 1111 Should connected to section named: Arms
Exercis name Ab Crunch Machine Should connected to section named: Abs
Exercis name Abdominal Rollout Should connected to section named: Abs
Exercis name Air Bicycles Should connected to section named: Abs
Exercis name Alternating Dumbbell Curl Should connected to section named: Arms (Biceps)
Exercis name Arnold Dumbbell Press Should connected to section named: Shoulders (Anterior Deltoids)
Exercis name Barbell Bench Press Should connected to section named: Chest
Exercis name Barbell Curl Should connected to section named: Arms (Biceps)
Exercis name Barbell Deadlift Should connected to section named: Back
Exercis name Barbell Front Squat Should connected to section named: Legs (Quadriceps)
Exercis name Barbell Hip Thrust Should connected to section named: Glutes
Exercis name Barbell Holds Should connected to section named: Arms (Forearms)
Exercis name Barbell Lunge (In-Place) Should connected to section named: Legs (Quadriceps)
Section group name: Arms
Exercis name Barbell Lunge (Reverse) Should connected to section named: Legs (Quadriceps)
如您所见,所有练习都按此规则排序:.orderBy(.ascending(\.name))
我想通过部分排序。
所以 Abs 应该只包含 Abs 运动,而手臂部分应该只包含手臂运动。
【问题讨论】:
标签: ios swift nsfetchedresultscontroller nsfetchrequest corestore