通过NULL NSDates对NSFetchedResultsController进行排序

时间:2014-02-10 14:50:58

标签: ios objective-c sorting nsfetchedresultscontroller nssortdescriptor

我有一个循环查看数据数组的tableview。数据是一组可能附加提醒时间的联系人。例如:

  • 杰西卡
  • 约翰
  • 比尔
  • 卡特里娜(2月9日)
  • 布莱恩(2月11日)

现在,它以递增的方式通过核心数据属性reminderDate对表格视图进行排序。它工作半正确。唯一的问题是我希望将NULL reminderDate的项目投放到NSFetchedResultsController的末尾而不是开头。

理想情况下,它看起来像这样:

  • 卡特里娜(2月9日)
  • 布莱恩(2月11日)
  • 杰西卡
  • 约翰
  • 比尔

我无法使用比较NSSortDescriptor,因为NSFetchedResultsController不支持。此外,我不想在之后执行排序我从NSFetchedResultsController获得结果,而是在我进行查询之前。

以下是我使用的当前代码:

NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"User"];
NSSortDescriptor *sortByDate = [NSSortDescriptor sortDescriptorWithKey:@"reminderDate" ascending:YES];

[fetchRequest setSortDescriptors:@[sortByDate]];
self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
                                                                    managedObjectContext:context
                                                                      sectionNameKeyPath:nil
                                                                               cacheName:nil];

我相信我应该添加另一个sortDescriptor,但没有任何工作正常。

1 个答案:

答案 0 :(得分:5)

我最终做了他们在这里提到的事情:Using NSSortDescriptor to keep blank values down the list

我创建了一个BOOL值,表示用户是否有提醒集。所以,我通过提醒,然后按日期排序。

NSSortDescriptor *sortByDate = [NSSortDescriptor sortDescriptorWithKey:@"reminderDate" ascending:YES];
NSSortDescriptor *sortByHasReminder = [NSSortDescriptor sortDescriptorWithKey:@"hasReminder" ascending:NO];

效果很好。作为一个数据库爱好者,我讨厌有不必要的字段,但这是我用NSSFetchedResultsController做的最好的。