2

カテゴリと呼ばれるNSMutableArrayがあり、CategoryItemと呼ばれるオブジェクトが含まれています。CategoryItemにはNSStringプロパティ*textがあります。要素のテキストプロパティに基づいてこの配列をどのように並べ替えますか?これが意味をなさない場合は申し訳ありませんが、私はこれすべてに不慣れです。

私はこれを試しました:

[categories sortUsingSelector:@selector(localizedCaseInsensitiveCompare:)];

しかし、それは失敗しました。

4

4 に答える 4

10

これは、含まれている文字列ではなく、各オブジェクトに基づいて配列を並べ替えようとしているためです。

配列をソートするには、NSSortDescriptor のインスタンスを使用する必要があります。次のように作成できます。

NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"text" ascending:YES];

それで:

[categories sortUsingDescriptors:[NSArray arrayWithObject:descriptor]];
于 2012-11-21T17:23:53.993 に答える
7

これを試して:

[categories sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
    CategoryItem object1 = (CategoryItem)obj1;
    CategoryItem object2 = (CategoryItem)obj2;
    return [object1.text compare:object2.text];
}];

それが役立つことを願っています!

于 2012-11-21T17:24:42.440 に答える
4

CategoryItem に localizedCaseInsensitiveCompare を実装していないため、失敗します。

それをしたい場合は、次のように CategoryItem にその関数を実装します

- (NSComparisonResult)localizedCaseInsensitiveCompare:(CategoryItem *)anItem
{
    return [anItem.stringProperty localizedCaseInsensitiveCompare:self.stringProperty];
}
于 2012-11-21T17:26:34.227 に答える
2

あなたはちょっとこれを正しくしました。

問題は、文字列を並べ替えようとしているが、文字列がなく、CategoryItems があることです。同じコードを保持するにはlocalizedCaseInsensitiveCompare:、CategoryItem に対して実装するだけです。その関数で、テキスト値を比較し、正しい を返しますNSComparisonResult。たぶんこんな感じ

-(NSComparisonResult)localizedCaseInsensitiveCompare:(CategoryItem *)item2 {
    return [text localizedCaseInsensitiveCompare:[item2 text]];
}
于 2012-11-21T17:26:44.927 に答える