我使用函数 [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 回答
它有点晚了,但也许它可以帮助别人 .
事实是
GKAchievement loadAchievementsWithCompletionHandler:
加载了本地玩家取得进步的所有成就 . 这意味着,如果在相关的iTunes Connect应用程序中设置了新的成就(没有任何进展),则不会加载它们 . 必须首先报告一些进展!另一方面,
GKAchievementDescription loadAchievementDescriptionsWithCompletionHandler:
旨在获取有关iTunes Connect应用程序可用成就的 every 的信息 . 该描述也提供了成就的标识符 .为了获得新的成就,流程如下:
加载成就说明 . (
GKAchievementDescription loadAchievementDescriptionsWithCompletionHandler:
)向游戏中心报告成就的一些进展 . 可以根据
GKAchievementDescription
中的数据创建GKAchievement . (GKAchievementDescription reportAchievements:withCompletionHandler:
)从此时开始,在开始时加载成就进度以设置应用程序 . (
GKAchievement loadAchievementsWithCompletionHandler:
)你检查了返回的
descriptions
NSArray
没有0个元素吗?请注意,此处的
descriptions
数组仅返回此用户先前提交过的成就集合, not 在GameCenter上为此应用程序注册的所有成就的数组 .