检查您是不是已在 Game Center/GameKit 中解锁成就

Posted

技术标签:

【中文标题】检查您是不是已在 Game Center/GameKit 中解锁成就【英文标题】:Check if you've already unlocked an achievement in Game Center/GameKit检查您是否已在 Game Center/GameKit 中解锁成就 【发布时间】:2011-06-13 16:20:39 【问题描述】:

我已经为此困惑了很长时间。我了解如何在 Game Center 中解锁成就,我什至让整个消息传递系统正常工作。但我不知道如何检查成就是否已经解锁:(

显然这不起作用:

GKAchievement *achievement = [[GKachievement alloc] initWithIdentifier:ident] autorelease]; 
NSLog(@"%i",achievement.completed);

它总是跟踪“0”。

解锁成就确实有效:

GKAchievement *achievement = [[GKachievement alloc] initWithIdentifier:ident] autorelease]; 
achievement.percentComplete = 100;

所以并不是我在整个成就方面犯了错误,只是 GameKit 无法告诉我成就是否已经解锁。

如果有人能帮我解决这个问题,我将不胜感激!

【问题讨论】:

【参考方案1】:

为当前登录的用户加载之前提交的成就,您需要调用:

[GKAchievement loadAchievementsWithCompletionHandler: ^(NSArray *scores, NSError *error)

    if(error != NULL)  /* error handling */ 
    for (GKAchievement* achievement in scores) 
        // work with achievement here, store it in your cache or smith
    

];

您知道从 Game Center 开始的绝对最佳方式 - 成就和高分者是在此处查看 Apple 在线提供的演示项目: http://developer.apple.com/library/ios/#samplecode/GKTapper/Introduction/Intro.html

看看代码 - 它非常简单,可以快速掌握正在发生的事情,它具有本地成就缓存、提交到不同的排行榜等功能。

【讨论】:

【参考方案2】:

我即将自己开始实施。

根据我对文档的阅读,我认为您需要做的就是调用

loadAchievementsWithCompletionHandler: 

http://developer.apple.com/library/ios/documentation/GameKit/Reference/GKAchievement_Ref/Reference/Reference.html#//apple_ref/doc/uid/TP40009959-CH1-SW1

【讨论】:

只是为了确认,这正是如何做到这一点。我有一个 GameKitHelper 类来管理 GK 交互,包括成就。效果很好。

以上是关于检查您是不是已在 Game Center/GameKit 中解锁成就的主要内容,如果未能解决你的问题,请参考以下文章

如何检查输入的电子邮件 ID 是不是已在 Paypal 中注册?

检查表是不是已在代码优先方法中创建

检查用户是不是已在 Swift 中注册本地通知时出错

如何持续检查 AVAudioplayer 是不是已在 Swift 中播放完毕?

如何检查用户 JID 是不是已在 XMPPFrameWork 中使用

如何检查视图控制器是不是已在 Swift 中关闭