0

再びN00Bランドからのメモ。配列の並べ替えについてたくさん読んだことがあります-ブロックメソッドを試してみたかったのですが、頭を抱えていませんでした。代わりに、記述子メソッドを選択しました。このNSDate プロパティによるカスタム オブジェクトの並べ替え NSArray と、カスタム オブジェクトを含むNSMutableArray の並べ替え方法を読みました。たくさんの人の中で。私のコードでは、これを行いました:

NSString *lastHighScore = @"_highScore";
NSString *dateScoreCreated = @"_dateCreated";
NSSortDescriptor *highScoreDescriptor = [[[NSSortDescriptor alloc]
    initWithKey:lastHighScore                                        
    ascending:NO                                          
    selector:@selector(localizedCaseInsensitiveCompare:)] autorelease];

NSSortDescriptor *dateScoreCreatedDescriptor = [[[NSSortDescriptor alloc]
                                      initWithKey:dateScoreCreated
                                      ascending:NO
    selector:@selector(localizedCaseInsensitiveCompare:)] autorelease];
NSArray *descriptors = [NSArray arrayWithObjects:highScoreDescriptor, 
dateScoreCreatedDescriptor, nil];

NSArray *sortedArray = [[[FlipHighScoreStore sharedStore] allHighScores] sortedArrayUsingDescriptors:descriptors];

悲しいことに、そもそもエラーが発生しています - 初期化要素はコンパイル時の要素ではありません。私はこれを調べて設定しようとしましNSSortDescriptor *highScoreDescriptor = nilたが、highScoreDescriptor "Type Specifier Missing, default to int" という警告が表示されました。この場合は問題ありませんが、次の記述子の Date オブジェクトでは問題ありません。(異なるタイプで highSoreDescriptor を再定義しているというエラーも表示されます。)

また、利用可能なセレクターのリストはどこかにありますか? localizedCaseInsensitiveCompare:最初のプロパティ「_highScore」は int で、2 番目の「_dateCreated」は日付であるため、これを使用したいとは思いません。デフォルトが「compare」であることをどこかで読んだので、「compare:」と入力できますか? (1つの答えが見つかったと思います-最初の記述子に (intValue) を使用できます:

selector:@selector(intValue)] autorelease];

もっと読むと、日付の並べ替えのためにセレクター行を完全に廃止できると思います。あれは正しいですか?

最後に、それascending:NOは下降と同じですか?そうだと思いますが、プログラミングについては決して知りませんよね?

このコードをすべて独自のメソッドでラップする必要がありますか? または、テーブルをレイアウトしているコードに (後で) 挿入することはできますか?

このプロジェクトは ARC ではありません。

4

1 に答える 1