解散GameKit模态视图

时间:2011-07-21 20:47:04

标签: iphone crash modal-dialog dismiss

我正在尝试将Apple的游戏中心整合到我的应用程序中。我可以成功地将分数发布到排行榜,并显示排行榜,但问题出现在我试图解除排行榜模态视图时。我从游戏套件编程指南([url] http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/GameKit_Guide/LeaderBoards/LeaderBoards.html [/ url])中遵循了苹果的代码指示。

游戏中心的代码如下:

-(BOOL)isGameCenterAvailable{
    // Check for presence of GKLocalPlayer class.
    BOOL localPlayerClassAvailable = (NSClassFromString(@"GKLocalPlayer")) != nil;

    // The device must be running iOS 4.1 or later.
    NSString *reqSysVer = @"4.1";
    NSString *currSysVer = [[UIDevice currentDevice] systemVersion];
    BOOL osVersionSupported = ([currSysVer compare:reqSysVer options:NSNumericSearch] != NSOrderedAscending);
    return (localPlayerClassAvailable && osVersionSupported);
}

- (void) authenticateLocalPlayer
{
    if([self isGameCenterAvailable]){
        GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer];
        [localPlayer authenticateWithCompletionHandler:^(NSError *error) {
            if (localPlayer.isAuthenticated)
            {
                // Perform additional tasks for the authenticated player.
            }
        }];
    }
}

- (void) reportScore: (int64_t) score forCategory: (NSString*) category
{
    GKScore *scoreReporter = [[[GKScore alloc] initWithCategory:category] autorelease];
    scoreReporter.value = score;

    [scoreReporter reportScoreWithCompletionHandler:^(NSError *error) {
        if (error != nil)
        {
            // handle the reporting error
        }
    }];
}

- (void) showLeaderboard
{
    GKLeaderboardViewController *leaderboardController = [[GKLeaderboardViewController alloc] init];
    if (leaderboardController != nil)
    {
        leaderboardController.leaderboardDelegate = self;
        [self presentModalViewController: leaderboardController animated: YES];
    }
    //[leaderboardController release];
}

- (void)leaderboardViewControllerDidFinish:(GKLeaderboardViewController *)viewController
{

    if([self modalViewController] != nil){
        [self dismissModalViewControllerAnimated:YES];
    }

}

-(IBAction)show{
    [self showLeaderboard];
}

-(IBAction)submit{
    [self reportScore:9 forCategory:kLeaderboardID];
}

Xcode告诉我问题行是[self dismissModalViewControllerAnimated:YES];它说我的访问权限很差,我知道这意味着我正在尝试访问一个糟糕的指针,但我不明白为什么一切都不会无效。 Self报告它有一个modalviewcontroller。我尝试了各种各样的变种,我完全不知道为什么它会给我错误。

非常感谢任何帮助或建议。

提前致谢!

1 个答案:

答案 0 :(得分:0)

我在我的应用上遇到了一个非常类似的问题。我发现它与ModalViewController本身无关,而是与视图控制器显示它。

如果您使用Profiler中的zombies选项配置应用程序,您将能够看到正在发布的内容不应该是(很可能是UIImage或UIView)。您应该能够追踪分配了僵尸对象的功能,以找到导致问题的真实对象。

我认为错误在ModalViewController被解除时显示的原因是在对话框消失后调用各种视图元素进行重绘或刷新,然后在不应该被访问时释放被访问的内容。 / p>

希望这有帮助。