【问题标题】:Game Center achievement notification repeats游戏中心成就通知重复
【发布时间】:2013-11-15 21:28:41
【问题描述】:

我正在将 Game Center 集成到我的应用程序中,并且我做的一切都正确,很好,但我遇到了问题。当用户完成一项成就时,我想添加一个通知。我确实做到了这样:

GKAchievement *achievement = [[GKAchievement alloc] initWithIdentifier:@"theFirstAchievement"];
achievement.percentComplete = sharedApp.firstAchievement = sharedApp.firstAchievement + 50;
[achievement reportAchievementWithCompletionHandler:^(NSError *error)
    {
        if (error != nil)
        {
            NSLog(@"achievement failed");
        }
        else
        {
            NSLog(@"achievement succeded");
        }
     }];
if (achievement.percentComplete == 100.0) 
{
   [GKNotificationBanner showBannerWithTitle:@"Achievement Unlocked:" message:@"Master Question Master!" completionHandler:nil];
}

我的问题是,我不知道我是否做错了什么,但它应该显示一次通知,但是,如果我关闭我的应用程序并重新打开,当我再次完成成就时它会显示通知再次,即使它已经在我的游戏中心完成了!我究竟做错了什么?谢谢!

【问题讨论】:

    标签: ios notifications game-center achievements


    【解决方案1】:

    看看这个:

    if (achievement.percentComplete == 100.0) 
    

    这意味着如果成就百分比完成率为 100%,则显示横幅。但是,当您再次打开应用程序并读取百分比时,百分比仍然是 100%,因此它再次显示横幅。

    您必须记录已获得和授予的成就

    我建议这样:

    BOOL awarded = [[NSUserDefaults standardUserDefaults] boolForKey:@"theFirstAchievement"];
    if (achievement.percentComplete == 100.0 && !awarded) 
    {
       [GKNotificationBanner showBannerWithTitle:@"Achievement Unlocked:" message:@"Master Question Master!" completionHandler:nil];
        [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"theFirstAchievement"];
        [[NSUserDefaults standardUserDefaults] synchronize];
    }
    

    【讨论】:

    • 代码似乎缺少对 BOOL 奖励的检查,类似于 if (achievement.percentComplete == 100.00 && !awarded)
    • 这正是我修复它的方式,使用 BOOL 和 NSUserDefaults。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2012-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-30
    • 2012-12-22
    相关资源
    最近更新 更多