2012-10-27 73 views
4

我使用函數[GKAchievement loadAchievementsWithCompletionHandler:]來恢復當前播放器在初始化中的成就。但完成亨德爾從未被調用過。永不完成[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"); 
     } 
    }]; 
} 

可能是什麼問題?

回答

0

您是否檢查退貨descriptionsNSArray沒有0個元件

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

注意descriptions陣列這裏只返回收集該用戶以前提交了關於進步的成果,註冊過的GameCenter上爲這個應用程序的所有成就的陣列。

5

它來得有點晚,但也許它可以幫助別人。

事實上,GKAchievement loadAchievementsWithCompletionHandler:加載了本地玩家所取得的所有成就。這意味着,如果在iTunes Connect應用程序中設置了新的成就(沒有任何進展),它們將不會被加載。必須先報告一些進展!

在另一方面GKAchievementDescription loadAchievementDescriptionsWithCompletionHandler:是爲了得到所有了關於iTunes Connect的應用程序可用的成就每的信息。描述也提供了成就的標識符。

對於新鮮成就的流動如下:

  1. 負載的實現的描述。 (GKAchievementDescription loadAchievementDescriptionsWithCompletionHandler:
  2. 向Game Center報告成果的一些進展。 GKAchievement可以根據GKAchievementDescription中的數據創建。 (GKAchievementDescription reportAchievements:withCompletionHandler:
  3. 從這裏開始,載入成就的進度以設置您的應用。 (GKAchievement loadAchievementsWithCompletionHandler: