0

名前で並べ替える必要のある配列がありますが、並べ替えられるのは半分だけです。2つの部分に分割できるエントリのリストがあります。最初の部分は辞書から取得され、プロパティ「name」のみが含まれます。2番目の部分はコアデータデータベースから取得され、プロパティ「addedByUser」も取得されます。 。両方のリストはtempArray内にあり、_resultsarrayに追加されます。これにより、cellForRowAtIndexPathに直接つながります。しかし前に、私は_resultsarrayを名前でソートしようとしました。ここで問題が発生します。最初にaddedByUser属性のないリスト(名前で並べ替え)が表示され、次に他のリスト(addedByUser属性 "のあるリスト)が表示され、名前でも並べ替えられます。これらを混在させることはできません。

[_resultsarray addObjectsFromArray:tempArray];

// Sort the list
NSSortDescriptor *sort2 = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];
[_resultsarray sortUsingDescriptors:[NSArray arrayWithObject:sort2]];

私は何が間違っているのですか?ありがとうございました!

更新:申し訳ありませんが、tempArrayと_resultsarrayの両方が可変配列であることを書くのを忘れました。

更新2:名前が大文字または小文字で始まる場合は違いがあるようです。更新された質問は、単語が大文字で始まっているか小文字で始まっているかに関係なく、NSMutableArrayを並べ替える方法はありますか?

更新3:私は見つけました:

NSSortDescriptor *sortByName = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES selector:@selector(caseInsensitiveCompare:)];
4

2 に答える 2

0

これを試して:

NSSortDescriptor *sort2 = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];
_resultsarray = [tempArray sortedArrayUsingDescriptors:[NSArray arrayWithObject:sort2]];
于 2013-01-13T17:21:04.067 に答える
0

あなたは次のように書くべきですNSComparoator

_resultsarray = [tempArray sortedArrayUsingComparator:^(id firstObject, id secondObject) {
    NSString *name1 = ... ; // firstObject.name or firstObject.addedByUser
    NSString *name2 = ... ; // secondObject.name or secondObject.addedByUser
    return [name1 compare:name2];
}];
于 2013-01-13T17:23:18.447 に答える