Ios 按键中的字符串日期对NSR字典数组进行排序?

Ios 按键中的字符串日期对NSR字典数组进行排序?,ios,sorting,date,nsarray,nsdictionary,Ios,Sorting,Date,Nsarray,Nsdictionary,我一直在努力寻找一种简单的方法来对包含NSDictionary的NSMutableArray进行排序。每个NSDictionary都有一个名为“Date”的键,其中包含日期的NSString(例如:10/15/2014) 我要做的是根据这些字符串按升序对数组进行排序 我尝试过这个,但运气不好: NSComparisonResult dateSort(NSString *s1, NSString *s2, void *context) { NSDateFormatter *formatt

我一直在努力寻找一种简单的方法来对包含NSDictionary的NSMutableArray进行排序。每个NSDictionary都有一个名为“Date”的键,其中包含日期的NSString(例如:10/15/2014)

我要做的是根据这些字符串按升序对数组进行排序

我尝试过这个,但运气不好:

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];
我也尝试过这种方法,但运气不佳:

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];

你需要在字典里找到字符串。看起来你在尝试比较字典本身。如果您有一个名为data的数组,您可以这样做

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);

若要使用模型类进行排序,则必须使用它

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);
  • 使用finalCompleteArray是可变数组
  • 使用MessageChat是对象模型类文件
  • 使用obj1.LastDate是对象模型类变量

它在哪一行崩溃,错误消息是什么?对于第一块代码,它在NSDate*d1=[formatter dateFromString:s1]崩溃;崩溃为:NSDictionaryI length]:发送到instanceSounds的无法识别的选择器,就像将字典传递给字符串参数(s1)。显示整个方法的代码。s1和s2来自哪里?我更新了问题的底部,以包括如何调用该方法。除此之外,这就是我所做的排序方法。有什么我只是看不到的吗?