2015-10-16 54 views
0

如何根据日期为NSString格式的密钥对以下NSSDictionary进行排序?如何在NSSString基础上对NSString日期键进行排序?

Printing description of dictMessageWithDate: 
{ 
    "06:10:2015" =  (
     "<ChatMessage: 0x78e108c0>" 
    ); 
    "25:09:2015" =  (
     "<ChatMessage: 0x78fe8740>", 
     "<ChatMessage: 0x78ff5e50>", 
     "<ChatMessage: 0x78ff58b0>", 
     "<ChatMessage: 0x790205c0>", 
     "<ChatMessage: 0x7901ee00>", 
     "<ChatMessage: 0x79025990>", 
     "<ChatMessage: 0x7901f190>", 
     "<ChatMessage: 0x78faab50>", 
     "<ChatMessage: 0x78ff8ff0>", 
     "<ChatMessage: 0x78ff9860>", 
     "<ChatMessage: 0x78ffa1c0>", 
     "<ChatMessage: 0x78ffa490>", 
     "<ChatMessage: 0x78ff6810>", 
     "<ChatMessage: 0x78f98720>", 
     "<ChatMessage: 0x78f99790>", 
     "<ChatMessage: 0x78f42eb0>" 
    ); 
    "28:09:2015" =  (
     "<ChatMessage: 0x78ffad90>" 
    ); 
    "29:09:2015" =  (
     "<ChatMessage: 0x78ff1de0>", 
     "<ChatMessage: 0x78edad20>", 
     "<ChatMessage: 0x78e7a9d0>" 
    ); 
    "30:09:2015" =  (
     "<ChatMessage: 0x78ec3ac0>" 
    ); 
} 
+3

你不排序的NSDictionary。它是一个KEY/VALUE系统,而不是索引(如NSArray)系统。 – Larme

+0

......或换一种说法;字典*无序*。您将不得不保留一个单独的键值数组,但考虑使用更方便的方法来表示日期,因为对这些日期的任何操作(即'NSString'到'NSDate'转换)意味着很多重复处理。 – l00phole

回答

3

我会建议重组:

  1. 将一个寄件日期ChatMessage@property NSDate *dateSent财产。它应该已经有了,因为这是消息的重要属性。
  2. 将聊天消息保存在NSArray中,这是订购的集合类。
  3. 排序的聊天消息是这样的:

    NSSortDescriptor *dateDescriptor = [NSSortDescriptor 
               sortDescriptorWithKey:@"dateSent" 
                  ascending:YES]; 
    NSArray *sorted = [unsorted 
        sortedArrayUsingDescriptors:@[dateDescriptor]]; 
    
+0

但我需要创建类似whatsapp的日子 –

+0

你仍然可以这样做;你需要保留一个数组的数组。原则仍然相同,因为您仍然希望在每个部分中按日期排序聊天消息。 – l00phole

相关问题