通过NULL NSDates对NSFetchedResultsController进行排序

Bri*_*ich 4 sorting objective-c nssortdescriptor nsfetchedresultscontroller ios

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

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

现在,它reminderDate以递增的方式通过core-data属性对tableview进行排序.它工作半正确.唯一的问题是,我希望将物品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];
Run Code Online (Sandbox Code Playgroud)

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

Bri*_*ich 5

我最终做了他们在这里提到的事情:使用NSSortDescriptor将空白值保留在列表中

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

NSSortDescriptor *sortByDate = [NSSortDescriptor sortDescriptorWithKey:@"reminderDate" ascending:YES];
NSSortDescriptor *sortByHasReminder = [NSSortDescriptor sortDescriptorWithKey:@"hasReminder" ascending:NO];
Run Code Online (Sandbox Code Playgroud)

它运作良好.作为数据库爱好者,我讨厌有不必要的字段,但这是我用NSSFetchedResultsController做的最好的.