从未完成[GKAchievement loadAchievementsWithCompletionHandler:]

时间:2012-10-27 14:55:32

标签: iphone ios game-center

我使用函数[GKAchievement loadAchievementsWithCompletionHandler:]恢复当前播放器在初始化中的成就。但完成汉德从未被召唤过。

- (void)loadAchievements
{
    [GKAchievement loadAchievementsWithCompletionHandler:^(NSArray *achievements, NSError *error)
     {
         if (error == nil)     // !!-- if a breakpoint is set here, it would never be reached
         {
             @synchronized(_achievementsDictionary)
             {
                 for (GKAchievement* achievement in achievements)
                     [_achievementsDictionary setObject:achievement forKey:achievement.identifier];
                 NSLog(@"achievements loaded");
             }
         }
         else
         {
             NSLog(@"Error in loading achievements: %@", error);
         }
     }];
}

但是,类似的功能[GKAchievementDescription loadAchievementDescriptionsWithCompletionHandler:]效果很好:

- (void) retrieveAchievmentMetadata
{
    [GKAchievementDescription loadAchievementDescriptionsWithCompletionHandler:
     ^(NSArray *descriptions, NSError *error) {
         if (error != nil)
         {
             NSLog(@"Error in loading achievement descriptions: %@", error);
         }
         if (descriptions != nil)
         {
             @synchronized(_achievementsMetaDataDictionary)
             {
                 for (GKAchievementDescription* desc in descriptions)
                 {
                     _achievementsMetaDataDictionary[desc.identifier] = desc;
                 }
             }
             NSLog(@"achievement descriptions loaded");
         }
     }];
}

可能是什么问题?

2 个答案:

答案 0 :(得分:5)

有点晚了,但也许对别人有帮助。

事实是GKAchievement loadAchievementsWithCompletionHandler:加载了本地玩家取得进步的所有成就。这意味着,如果在相关的iTunes Connect应用程序中设置了新的成就(没有任何进展),则不会加载它们。必须首先报告一些进展!

另一方面,GKAchievementDescription loadAchievementDescriptionsWithCompletionHandler:旨在获得所有关于相关iTunes Connect应用的每个可用成就的信息。该描述也提供了成就的标识符。

对于一项新成就,流程如下:

  1. 加载成就说明。 (GKAchievementDescription loadAchievementDescriptionsWithCompletionHandler:
  2. 向游戏中心报告成就的一些进展。可以基于GKAchievementDescription中的数据创建GKAchievement。 (GKAchievementDescription reportAchievements:withCompletionHandler:
  3. 从此时开始,在开始时加载成就的进度以设置您的应用。 (GKAchievement loadAchievementsWithCompletionHandler:

答案 1 :(得分:0)

您是否检查过返回的descriptions NSArray是否没有 0个元素

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

请注意,此处的descriptions数组仅返回此用户先前已在上提交进度的成就集合,在GameCenter上注册的所有成就数组对于这个应用程序。