NSArrayをカスタムアルファベット順にソートしようとしています。私はオブジェクトの状態を含む文字列を持つArrayを持っているということです。NSSortDescriptorカスタム英数字の注文
利用可能な状態はentered, process, ready, done
です。
普通に(アルファベット順に)並べ替えると、注文は間違っています(完了、入力、処理、準備完了)。
私はそれを正しい方法で注文するには、次のコードを試してみました:
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;
}
}];
を私はまた言葉のちょうど最初の文字を使用してみましたが、それはあまりにも動作しませんでした。
このコンパレータを使用しているときは、respを注文しないだけです。配列は「古い」順序を保持します。
私は間違って食事をしていますか?コンパイラのソートを正しく理解できませんでしたか?助けのための
おかげで、よろしく、ジュリアン
ちょっとムンディ!素晴らしいアプローチ、ありがとう!しかし今、どうすればNSString(状態名付き)を_state_型のオブジェクトに変換できますか?私のアプリケーションはウェブベースのアプリケーションのiOSラッパーであるため、データベースから表現を変更することはできません。 **ありがとうございました! –
他のJSONやXMLの「フィールド」と同じ方法です。それらをカスタムオブジェクトのプロパティに1つずつマッチさせます。この場合はおそらくif文の文字列を使用します。 – Mundi