NSFetchedResultController - 对2个属性进行自定义排序

时间:2014-06-25 11:00:57

标签: ios iphone objective-c core-data nsfetchedresultscontroller

我在我的项目中使用 NSFetchedResultController 。以下是我想要实现的方案。

  • 我有一个名为联系人的表格,其中我有2个属性 LastMessageDate ContactName
  • 我想根据 LastMessageDate 对Contact对象进行排序。没有 LastMessageDate 的对象应根据 ContactName 按字母顺序)进行排序。

对于Ex:

考虑我有C1,C2,C3,C4,C5,C6作为我的联系人,其中C2和C6有LastMessageDate存在。因此,分类的联系人应该是C2,C6,C1,C3,C4,C5

2 个答案:

答案 0 :(得分:1)

首先使用两个排序描述符按字母顺序对所有联系人进行排序,然后根据最后一个消息日期过滤。请参阅以下代码 -

NSSortDescriptor *contactName = [[NSSortDescriptor alloc]
                                    initWithKey: @"ContactName" ascending: YES];

NSSortDescriptor *lastMessageDate = [[NSSortDescriptor alloc]
                                                    initWithKey: @"LastMessageDate" ascending: YES];


NSArray *sortedArray = [contactArray sortedArrayUsingDescriptors: [NSArray arrayWithObjects: contactName, lastMessageDate, nil]];

答案 1 :(得分:0)

您可以将LastMessageDate的默认日期设置为distantFuturedistantPast吗?

现在,当您按日期排序时,这些项目将是第一个或最后一个,并且将使用第二个排序描述符(因此它们将按字母顺序排序)。

并且您的其他代码会检查日期是什么,并且当它等于distantFuturedistantPast时可以使用(可能是自定义访问器方法)。