2012-01-27 4 views
2

私はNSFetchRequestを持っています。コアデータからオブジェクトを取得していて、それを小さなものNSSortDescriptorでソートしています。しかし、私はiOS4を実行iPad上でまったく同じコードをテストする場合、NSSortDescriptor - 注文が変更されましたか?

NSMutableArray *sortDescriptors = [NSMutableArray array]; 
    NSSortDescriptor *sortDescriptor1 = [NSSortDescriptor sortDescriptorWithKey:@"ownerName" ascending:YES selector:@selector(caseInsensitiveCompare:)]; 
    NSSortDescriptor *sortDescriptor2 = [NSSortDescriptor sortDescriptorWithKey:@"petName" ascending:YES selector:@selector(caseInsensitiveCompare:)]; 
    [sortDescriptors addObject:sortDescriptor1]; 
    [sortDescriptors addObject:sortDescriptor2]; 
    [fetchRequest setSortDescriptors:sortDescriptors]; 

iOS5を上すべてが期待どおりに動作し、5.1:私は、ユーザーが選択したものに応じて異なるもののカップルを使用していますが、彼らはこのようなものです。 2.1(または4.3シミュレータ)では、すべての最初のソート記述子の順序が逆になります。この例では、所有者の名前はZからAの順になっていますが、ペットはAからZの順序で正しく並べられます。

以前のiOSバージョンで、ascendingブール値が間違っているバグがありましたか?あるいは、私が間違っているかもしれない何か他のものがありますか?

EDIT:最初のキー(ownerName)がNSFetchedResultsControllerセクションとして使用されます。これが適切かどうかはわかりません。

ありがとうCraig

+0

'ascending'パラメータに' NO'を渡すと、正しい順序が得られますか? – Mundi

+0

はい。最初のSDの「昇順」文字をNOに変更してから、iOS5の結果を反映しています。 2番目のSDはまだYESに設定されていて、セクション内の項目は同じ方法で並べられました。奇妙な! –

答えて

0

ちょっと推測してください。

caseInsensitiveCompare:を指定せずに良い結果が得られました。

また、厳密にはNSFetchRequestは、引数としてNSArrayを想定しており、NSMutableArrayではありません。 Appleのサンプルコードのすべてで、それは通常、(代わりに不変の可変使用して)そのような

[fetchRequest setSortDescriptors: 
    [NSArray arrayWithObjects:sortDescriptor1, sortDescriptor2, nil]]; 

私が持っていたエラーのようなものですが、多くの場合、それはまただけで動作します。多分それを変えることは価値があるかもしれません。

+0

ありがとう!私は 'caseInsensitiveCompare'を削除しようとしましたが、違いはありません。私は配列に変更可能な配列を変更しようとします、明日は何か違いがあるかどうかを確認します。 –

+0

これは違いがないことを確認できます:( –

+0

'NSMutableArray'と' NSArray'に関しては、 'NSMutableArray'は' NSArray'のサブクラスなので、渡すと自動的にキャストされるので、問題はありません。正常なOOシステムでは、すべてのサブクラスがそのスーパークラスのために立つことができます。 –

関連する問題