0

同様の問題を抱えたトピックがたくさんあることは知っていますが、私の質問に対応するトピックを見つけることができませんでした。

ハイスコ​​アの plist を保存したい。 ハイスコ​​アのすべてのエントリには、NSString* と int の
2 つの要素が必要です。

トップ 20 のハイスコア (文字列と整数のペア) を保存し、それを plist で実行したいと考えています。

私はから始めます:

NSMutableArray *arr = [[NSMutableArray alloc] initWithContentsOfFile: [[NSBundle mainBundle] pathForResource:@"Mylist" ofType:@"plist"]];

配列の項目 0 をディクショナリにしたいのですが、そこに (string, int) のキーと値のペアを挿入できます
。どうすればよいですか?

4

3 に答える 3

1

[arr addObject:score];10 個になるまで、いつでも を呼び出して並べ替え、最後の項目を削除できます。

分類する:

[arr sortUsingComparator:^(id firstObject, id secondObject) {
    NSDictionary *firstDict = (NSDictionary *)firstObject;
    NSDictionary *secondDict = (NSDictionary *)secondObject;
    int firstScore = [[firstDict objectForKey:@"score"] intValue];
    int secondScore = [[secondDict objectForKey:@"score"] intValue];
    return firstScore < secondScore ? NSOrderedAscending : firstScore > secondScore : NSOrderedDescending : NSOrderedSame;
}];

スコアを逆にしたい場合は、「>」を「<」に、またはその逆に変更します。リストを 10 に抑えるには:

while ([arr count] > 10) {
    [arr removeLastObject];
}

plist からロードするときにソートが必要になる場合があります。スコアが 10 の場合、パフォーマンスへの影響は最小限になるため、念のため実行することをお勧めします。

于 2012-04-09T13:23:28.337 に答える
1

プロパティ リストのシリアル化

あなたのメソッドはおそらく不変の配列を返すので、ミュータビリティオプション...

plist への保存はwriteToFile:...またはwriteToURL:...メソッドで行われます

于 2012-04-09T01:51:49.463 に答える
0
[arr insertObject:[NSMutableDictionary dictionary] atIndex:0];
于 2012-04-08T20:28:48.063 に答える