2014-01-30 60 views
6

我一直在努力寻找一种简单的方法来排序包含NSDictionaries的NSMutableArray。每个NSDictionary都有一个名为“Date”的键,它包含一个日期的NSString(例如:10/15/2014)。通过字符串日期在键中NS NSArray NSArray的排序?

我在找的是按升序对这些字符串进行排序。

我已经没有运气尝试这样做:

NSComparisonResult dateSort(NSString *s1, NSString *s2, void *context) { 

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
    [formatter setDateFormat:@"MM/dd/yy"]; 

    NSDate *d1 = [formatter dateFromString:s1]; 
    NSDate *d2 = [formatter dateFromString:s2]; 

    return [d1 compare:d2]; // ascending order 
    return [d2 compare:d1]; // descending order 
} 

我还没有运气尝试这样做:

NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"interest" ascending:YES]; 
    stories=[stories sortedArrayUsingDescriptors:[NSArray arrayWithObjects:descriptor,nil]]; 
    recent = [stories copy]; 

在发生碰撞每种方法的结果,我认为这是因为它是一个NSString,而不是一个NSDate,但我只是在如何做到这一点的损失。

任何人都可以告诉我正确的方法来完成这个吗?

这是我如何调用一个代码块:

theDictionaries = [[theDictionaries sortedArrayUsingFunction:dateSort context:nil] mutableCopy]; 
+0

它发生什么事故,什么是错误信息? – rdelmar

+0

第一块代码在NSDate * d1 = [formatter dateFromString:s1]中崩溃;与崩溃是:NSDictionaryI长度]:无法识别的选择器发送到实例 – user3251233

+0

听起来就像你正在传递字典到字符串参数(s1)。显示整个方法的代码。 s1和s2从哪里来? – rdelmar

回答

11

你需要让你的字典里面的字符串。它看起来像你试图比较字典本身。如果你有一个叫数据的数组,你可以这样做,

NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateFormat:@"MM/dd/yyyy"]; 

self.data = [self.data sortedArrayUsingComparator:^NSComparisonResult(NSDictionary *obj1, NSDictionary *obj2) { 
    NSDate *d1 = [formatter dateFromString:obj1[@"date"]]; 
    NSDate *d2 = [formatter dateFromString:obj2[@"date"]]; 

    return [d1 compare:d2]; // ascending order 
    return [d2 compare:d1]; // descending order 
}]; 

NSLog(@"%@",self.data); 
0

如果你想使用模型类进行排序,那么你必须使用它。

NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateFormat:@"yyyy-MM-dd hh:mm a"]; 

finalCompleteArray = [finalCompleteArray sortedArrayUsingComparator:^NSComparisonResult(MessageChat *obj1, MessageChat *obj2) { 
         NSDate *d1 = [formatter dateFromString:obj1.LastDate]; 
         NSDate *d2 = [formatter dateFromString:obj2.LastDate]; 

         NSLog(@"[d1 compare:d2] %ld",(long)[d1 compare:d2]); 
         NSLog(@"[d2 compare:d1] %ld",(long)[d2 compare:d1]); 
         return [d2 compare:d1]; // descending order 
        }]; 
     NSLog(@"%@",finalAssignedArray); 
  • 使用finalCompleteArrayMutableArray
  • 使用MessageChat是对象模型类文件
  • 使用obj1.LastDate是对象模型类可变