如何检索Game center的成就百分比并修改后提交?

How to retrieve Game center's achievement percentage and submit back with modification?

我已经配置了所有 Game Center 功能和下面用于解锁成就的代码,运行良好。

- (void) unlockAchievementThis:(NSString*)achievementID {
    GKAchievement *achievement = [[GKAchievement alloc] initWithIdentifier:
                                  achievementID];
    if (achievement){
        achievement.percentComplete = 100;
        achievement.showsCompletionBanner = true;
        [GKAchievement reportAchievements:@[achievement] withCompletionHandler:^(NSError *error) {
            if (error != nil) {
                NSLog(@"Error at unlockAchievementThis()");
            }
        }];
    }
}

现在我的问题是增量成就。我有另一种方法来获得很少的成就,我希望以前的成就百分比以常数增加。

我的游戏是cpp的,我不太了解ObjC。 我在下面得到了一些我认为应该对我有帮助的代码,但我不知道如何使用 achievementDescriptions 来获取百分比并将 incStep 添加到其中并提交后台游戏中心

- (void) incrementAchievementThis:(NSString*)achievementID :(NSInteger) incStep
{
    NSMutableDictionary *achievementDescriptions = [[NSMutableDictionary alloc] init];
    [GKAchievementDescription loadAchievementDescriptionsWithCompletionHandler:^(NSArray *descriptions, NSError *error) {
        if (error != nil) {
            NSLog(@"Error getting achievement descriptions: %@", error);
        }
        for (GKAchievementDescription *achievementDescription in descriptions) {
            [achievementDescriptions setObject:achievementDescription forKey:achievementDescription.identifier];
        }

    }];

百分比存储在 GKAchievement percentComplete 中,因此您需要加载(以及更新和报告)GKAchievement 而不是 GKAchievementDescription

GKAchievmenentDescriptions 是在 iTunes Connect 中配置的,从您的应用程序的角度来看是 "read-only"。

最后我通过下面的代码得到了输出...

- (void) incrementAchievementThis:(NSString*)achievementID :(NSInteger) incStep
{
    [GKAchievement loadAchievementsWithCompletionHandler:^(NSArray *achievements, NSError *error)
     {
         if (error == nil) {
             for (GKAchievement* achievement in achievements) {
                 if ([achievementID isEqualToString:achievement.identifier]) {
                     achievement.percentComplete += incStep;

                     [GKAchievement reportAchievements:@[achievement] withCompletionHandler:^(NSError *error) {
                            if (error != nil) {
                                NSLog(@"Error at incrementAchievementThis()");
                            }
                    }];
                 }
             }
         }
         else {
             NSLog(@"Error in loading achievements: %@", error);
         }
     }];
}