再び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 ではありません。