5

[GKAchievement loadAchievementsWithCompletionHandler:]初期化で現在のプレイヤーの実績を復元する機能を使用しています。しかし、completionHandler は呼び出されませんでした。

- (void)loadAchievements
{
    [GKAchievement loadAchievementsWithCompletionHandler:^(NSArray *achievements, NSError *error)
     {
         if (error == nil) // !!-- ブレークポイントがここに設定されている場合、到達することはありません
         {
             @synchronized(_achievementsDictionary)
             {
                 for (GKAchievement* アチーブメントのアチーブメント)
                     [_achievementsDictionary setObject:achievement forKey:achievement.identifier];
                 NSLog(@"成果が読み込まれました");
             }
         }
         そうしないと
         {
             NSLog(@"実績の読み込みエラー: %@", error);
         }
     }];
}

ただし、同様の機能は[GKAchievementDescription loadAchievementDescriptionsWithCompletionHandler:]うまく機能します。

- (void) 達成メタデータの取得
{
    [GKAchievementDescription loadAchievementDescriptionsWithCompletionHandler:
     ^(NSArray *説明、NSError *エラー) {
         if (エラー != nil)
         {
             NSLog(@"実績の説明の読み込み中にエラーが発生しました: %@", error);
         }
         if (説明 != nil)
         {
             @synchronized(_achievementsMetaDataDictionary)
             {
                 for (GKAchievementDescription* 説明の desc)
                 {
                     _achievementsMetaDataDictionary[desc.identifier] = desc;
                 }
             }
             NSLog(@"実績の説明が読み込まれました");
         }
     }];
}

何が問題なのですか?

4

2 に答える 2

0

返された要素descriptions NSArrayが 0 でないことを確認しましたか?

 if( !descriptions.count )
   printf( "User has not submitted _any_ progress on _any_ achievements\n" ) ;
 else for (GKAchievementDescription* desc in descriptions) ..

ここの配列は、このアプリの GameCenter に登録されたすべての実績の配列ではなくこのユーザーが以前に進行状況を送信した実績のコレクションdescriptionsのみを返すことに注意してください。

于 2013-09-22T14:28:12.690 に答える