2014-01-30 9 views
6

Ich habe gekämpft, um eine einfache Möglichkeit zu finden, ein NSMutableArray zu sortieren, das NSDictionaries enthält. Jedes NSDictionary hat einen Schlüssel namens "Date", der einen NSString eines Datums enthält (Beispiel: 15.10.2014).NSArray von NSDictionaries nach String-Datum in Schlüssel sortieren?

Was ich suche, ist das Array auf diese Strings in aufsteigender Reihenfolge sortieren.

Ich habe das Glück, ohne versucht:

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 
} 

Ich habe dies auch versucht ohne Glück:

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

Jeder Weg führt zu einem Absturz und ich denke, es ist, weil es sich um eine NSString anstelle von NSDate, aber ich weiß nicht, wie ich das machen soll.

Kann mir jemand den richtigen Weg zeigen, dies zu erreichen? Diese

ist, wie ich den ersten Codeblock rufen:

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

In welcher Zeile stürzt es ab, und was ist die Fehlermeldung? – rdelmar

+0

Mit dem ersten Code-Block stürzt es auf NSDate ab * d1 = [formatter dateFromString: s1]; mit folgendem Absturz: NSDictionaryI length]: unerkannter Selektor, der an Instanz gesendet wurde – user3251233

+0

Klingt so, als würden Sie ein Wörterbuch an einen Zeichenfolgenparameter (s1) übergeben. Zeigen Sie den Code für die gesamte Methode an. Woher kommen s1 und s2? – rdelmar

Antwort

11

Sie müssen die Zeichenfolgen in Ihrem Wörterbücher zu bekommen. Es sieht so aus, als ob Sie versuchen, die Wörterbücher selbst zu vergleichen. Wenn Sie ein Array hatte Daten genannt, würden Sie etwas tun,

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

wenn Sie Model-Klasse sortieren verwenden möchten, dann müssen Sie es verwenden.

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); 
  • Mit finalCompleteArray ist MutableArray
  • Mit MessageChat istModel-Klasse Datei-Objekt
  • Mit obj1.LastDate ist Object Model Klasse Variable
Verwandte Themen