首页 文章

从未完成[GKAchievement loadAchievementsWithCompletionHandler:]

提问于
浏览
4

我使用函数 [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

    它有点晚了,但也许它可以帮助别人 .

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

    另一方面, GKAchievementDescription loadAchievementDescriptionsWithCompletionHandler: 旨在获取有关iTunes Connect应用程序可用成就的 every 的信息 . 该描述也提供了成就的标识符 .

    为了获得新的成就,流程如下:

    • 加载成就说明 . ( GKAchievementDescription loadAchievementDescriptionsWithCompletionHandler:

    • 向游戏中心报告成就的一些进展 . 可以根据 GKAchievementDescription 中的数据创建GKAchievement . ( GKAchievementDescription reportAchievements:withCompletionHandler:

    • 从此时开始,在开始时加载成就进度以设置应用程序 . ( GKAchievement loadAchievementsWithCompletionHandler:

  • 5

    你检查了返回的 descriptions NSArray 没有0个元素吗?

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

    请注意,此处的 descriptions 数组仅返回此用户先前提交过的成就集合, not 在GameCenter上为此应用程序注册的所有成就的数组 .

相关问题