0

私はNSMutableArray* names、NSStrings を含む を持っています。caseInsensitiveCompareメソッド で配列をソートしたい。

これは私が書いたコードです:

names= [names sortedArrayUsingComparator: ^ NSComparisonResult (id obj1, id obj2)
            {
                return [obj1 caseInsensitiveCompare: obj2];
            }];

問題はsortedArrayUsingComparator、NSMutableArray ではなく NSArray を返すことです。このコードでは、実行時に警告と問題が発生します。
NSArray を NSMutableArray にキャストする方法はありますか? それとも、すべての要素をコピーする必要がありますか? この最後の解決策は費用がかかります: 誰かが素敵でオーバーヘッドの少ない解決策を提案できますか?

4

1 に答える 1

1

使用している関数の名前 ( sortedArrayUsingComparator) は、可変配列ではなく配列を返すことを示していることに注意してください。変更可能なコピーを取得するには、NSArray の mutableCopy メソッドを使用します。

names= [[names sortedArrayUsingComparator: ^ NSComparisonResult (id obj1, id obj2)
       {
           return [obj1 caseInsensitiveCompare: obj2];
       } ] mutableCopy];

または、読みやすく/フォローしやすい:

NSArray *namesArray = [names sortedArrayUsingComparator:^NSComparisonResult (id obj1, id obj2) {
       return [obj1 caseInsensitiveCompare: obj2];
       }];
names = [namesArray mutableCopy];
于 2012-05-20T14:31:32.110 に答える