问题描述
|
我有一张
Checklists
表格,每个表格都包含一堆ChecklistItems
。每个ChecklistsItem具有2个Bool值:Checked
和Urgent
。 Checklist实体还具有用于跟踪事物的各种属性(例如itemsUnchecked)。
我想对我的表格进行排序,其中最不完整的检查清单(即那些未检查项目最多的清单)在顶部。我正在这样设置我的排序描述符:
NSMutableArray *items = [NSMutableArray arrayWithArray:fetchedResultsController.fetchedobjects];
NSSortDescriptor *itemsUncheckedDescriptor = [[NSSortDescriptor alloc] initWithKey:@\"itemsUnchecked\" ascending:NO];
NSSortDescriptor *itemsUrgentDescriptor = [[NSSortDescriptor alloc] initWithKey:@\"itemsUrgent\" ascending:NO];
NSSortDescriptor *itemsCountDescriptor = [[NSSortDescriptor alloc] initWithKey:@\"checklistItems.@count\" ascending:NO];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:itemsUncheckedDescriptor,itemsUrgentDescriptor,itemsCountDescriptor,nil];
[items sortUsingDescriptors:sortDescriptors];
除了一件事,这一切都很好。如果清单是空的(即它根本没有清单项目),它将显示在完整的清单下面(即所有项目都被打勾)。这是因为空清单有零个项目,所以我的itemsCountDescriptor放在底部。
如何使我的空清单显示在已完成清单的上方,但仍将项目数作为最终描述符?
解决方法
我可以想到的最干净的方法是声明另一个属性BOOL isEmpty,并根据该属性以及其他属性进行排序。