2014-01-30 3 views
6

Я пытаюсь найти простой способ сортировки NSMutableArray, который содержит NSDictionaries. Каждый NSDictionary имеет ключ с именем «Дата», который содержит NSString даты (например: 10/15/2014).Сортировать NSArray из NSDictionaries по дате строки в ключе?

Что я хочу сделать, так это отсортировать массив на основе этих строк в порядке возрастания.

Я попытался это не повезло:

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 length]: непризнанный селектор, отправленный в экземпляр – 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); 
  • Использование finalCompleteArray является MutableArray
  • Использование MessageChat является объектом модели класса Файл
  • Использование obj1.LastDate является Object Model Class Переменная
Смежные вопросы