2

私は NSDictionary オブジェクトを設定しているので、そのキーNSDictionary *scoreObjectにはプレーヤーの名前があり、そのには変更可能な辞書があります。データを取得するために、Parse で作成したカスタム クラスをプルしています。このクラスには、属性「Name」、「Score」、および「createdAt」があります。{ date : score }

上記が Parse のデータの各行で自動的にプルされるように構造をセットアップしようとしていますが、同じ の 2 つのデータ行があり、 myでキーNameとして設定されると問題が発生します。たとえば、Bob が 2 つのスコアと 2 つの createdAt 日付を持っている場合、キー = "Bob" の下に両方を格納できるように、値の辞書を単純に拡張するにはどうすればよいでしょうか?scoreObject

ありがとう!

4

2 に答える 2

2

ここに役立つコードがあります。あなたの場合に何かを適応させる必要があるかもしれません:

主な口述をどこかに割り当てる:

// assuming its a property
self.scoreObject = [NSMutableDictionary new];

ここで、名前に新しいペアの日付/スコアを設定するときはいつでも、最初にその名前にすでにエントリがあるかどうかを確認してください。はいの場合、以前に割り当てられた NSMutableDictionary を使用して、新しいペアを保存します。そうでない場合は、1 つ割り当ててから、新しいペアを設定します。

日付とスコアを受け取るメソッドにカプセル化しています。

-(void)addNewScore:(NSString*)score AndDate:(NSString*)date forUsername:(NSString*)username
{

    NSMutableDictionary *scoresForUser = self.scoreObject[username]; //username is a string with the name of the user, e. g. @"Bob"

    if (!scoresForUser)
    {
        scoresForUser = [NSMutableDictionary new];
        self.scoreObject[username] = scoresForUser
    }

    scoresForUser[date] = score; //setting the new pair date/score in the NSMutableDictionary of scores of that giver user.

}

ps: 例では日付とスコアを文字列として使用しましたが、必要に応じて NSDate または NSNumber を変更せずに使用できます。

これで、次のような方法でユーザーのすべてのスコアを一覧表示できます。

-(void)listScoresForUser:(NSString*)username
{
   NSMutableDictionary *scoresForUser = self.scoreObject[username];

   for (NSString *date in [scoresForUser allKeys]) {
        NSString *score = scoresForUser[date];
        NSLog(@"%@ - score: %@, createdAt: %@", username, score, date);
   }
}

このようにして、必要な構造にデータを格納できるはずです。それがあなたが探していたようなものかどうか教えてください。

于 2013-08-02T02:44:03.430 に答える