Ich versuche, ein NSArray mit einer benutzerdefinierten alphabetischen Reihenfolge zu sortieren. Der Deal ist, dass ich ein Array mit Strings habe, die Zustände von Objekten enthalten.NSSortDescriptor benutzerdefinierte alphanumerische Reihenfolge
Die verfügbaren Zustände sind entered, process, ready, done
.
Wenn ich sie jetzt normal sortiere (in alphabetischer Reihenfolge), wäre die Reihenfolge falsch (erledigt, eingegeben, verarbeitet, fertig).
Ich habe versucht, den folgenden Code es den richtigen Weg, um zu bestellen:
NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"state" ascending:YES comparator:^(id obj1, id obj2) {
if ([obj1 isEqualToString:@"entered"] && [obj2 isEqualToString:@"process"]) {
return (NSComparisonResult) NSOrderedAscending;
}
else if ([obj1 isEqualToString:@"process"] && [obj2 isEqualToString:@"entered"]) {
return (NSComparisonResult) NSOrderedDescending;
}
else if ([obj1 isEqualToString:@"process"] && [obj2 isEqualToString:@"ready"]) {
return (NSComparisonResult) NSOrderedAscending;
}
else if ([obj1 isEqualToString:@"ready"] && [obj2 isEqualToString:@"process"]) {
return (NSComparisonResult) NSOrderedDescending;
}
else if ([obj1 isEqualToString:@"ready"] && [obj2 isEqualToString:@"done"]) {
return (NSComparisonResult) NSOrderedAscending;
}
else if ([obj1 isEqualToString:@"done"] && [obj2 isEqualToString:@"ready"]) {
return (NSComparisonResult) NSOrderedDescending;
}
else {
return (NSComparisonResult) NSOrderedSame;
}
}];
Ich habe auch versucht, nur die ersten Buchstaben der Worte verwenden, aber es hat nicht zu arbeiten.
Wenn ich diesen Komparator verwende, ist es einfach nicht zu bestellen bzw.. Das Array behält die "alte" Reihenfolge bei.
Was mache ich falsch? Habe ich die Komparatoren nicht richtig verstanden?
Vielen Dank für Hilfe, Mit freundlichen Grüßen, Julian
Hey Mundi! Toller Ansatz, danke! Aber jetzt: Wie könnte ich den NSString (mit den Zustandsnamen) in ein Objekt vom Typ _state_ konvertieren? Ich kann die Darstellung nicht von der Datenbank aus ändern, da meine App "nur" ein iOS-Wrapper für eine webbasierte Anwendung ist. ** Danke ** aber! –
So wie Sie es mit anderen JSON- oder XML-Feldern tun würden. Ordnen Sie sie nacheinander den Eigenschaften Ihres benutzerdefinierten Objekts zu. In diesem Fall vielleicht nur mit einer Folge von if-Anweisungen. – Mundi