0

列と呼ばれるNSObjectから拡張するモデルオブジェクトがあります。列には、プロパティとデータの2つのフィールドがあります。プロパティは、データが配列であるときに任意のキーと値のペアを格納するNSDictionaryです。

列は配列で提供され、常にプロパティにあることがわかっている値、つまりキーordinal_positionを持つ値で並べ替える必要があります。

次のコードを使用して並べ替えていますが、モデルオブジェクトに「ordinal_position」がなく、モデルオブジェクトのプロパティにのみ存在するため、常に失敗します。

NSArray *unsortedArray = [resultStore allValues];
NSSortDescriptor *sortDescriptor = [[[NSSortDescriptor alloc] initWithKey:@"ordinal_position" ascending:YES] autorelease];

NSArray *sortedArray = [unsortedArray sortedArrayUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]];

NSSortDescriptorに、モデルオブジェクトのディクショナリでプロパティを検索するように指示するにはどうすればよいですか?

4

2 に答える 2

2

NSComparisonResultを返す独自のセレクターを定義し、それを実装する必要があります。

- (NSComparisonResult)compareByProperty:(Column *)aColumn {
    id thisValue = [self valueForKey:@"ordinal_position"];
    id otherValue = [self valueForKey:@"ordinal_position"];

    return [thisValue compare:otherValue]; // Replace to suit your logic
}

次に、NSArrayメソッドを使用しますsortedArrayUsingSelector:

NSArray *sortedArray = [unsortedArray sortedArrayUsingSelector:@selector(compareByProperty:)];

比較メソッドは、これを呼び出しているクラスではなく、モデルオブジェクトに存在する必要があることに注意してください。イディオムは、特定のモデルオブジェクト()を最初のオブジェクト内からself別のモデルオブジェクト()と比較することです。aColumn

于 2010-01-06T17:39:43.490 に答える
0

keyPathを使用します。

@ "myDictionary.ordinal_position"

于 2010-01-06T17:41:40.117 に答える