1

以下代码在 iOS 6.0(模拟器和设备)上运行良好。游戏中心很好。但它在 iOS 5.0 模拟器上什么也没做。不幸的是,我没有装有 iOS 5.0 的设备,所以我无法检查这是否是与模拟器相关的问题。

- (void)showLeaderboard:(NSString *)leaderboard
{
    GKLeaderboardViewController * leaderboardViewController = [[GKLeaderboardViewController alloc] init];
    leaderboardViewController.modalPresentationStyle = UIModalPresentationCurrentContext;
    [leaderboardViewController setCategory:leaderboard];
    [leaderboardViewController setLeaderboardDelegate:self];
    [[[UIApplication sharedApplication] delegate].window.rootViewController presentViewController:leaderboardViewController animated:YES completion:^{
    }];
    [leaderboardViewController release];
}

那么会发生什么?没有什么。不显示视图。它不会将任何消息记录到控制台中。它甚至没有到达完成块。我试着到处玩,这就是我设法弄清楚的。我使用继承自的 CustomLeaderboardViewControllerGKLeaderboardViewController而不是 pure GKLeaderboardViewController,并在 shouldAutorotateToInterfaceOrientation 方法中放置一个断点。它不会使用上面的代码触发。但是如果我使用 setCategory:nil 而不是 setCategory:leaderboard 那个断点触发。仍然没有进一步发生,并且没有调用完成块。任何想法为什么会发生这样的事情?

4

2 回答 2

0

事实证明这只是一个愚蠢的错误。[[UIApplication sharedApplication] delegate].window.rootViewController 为 nil,因为在 iOS 5.0 中从未设置过。

于 2013-08-03T07:13:36.040 回答
0

确保所有变量(例如,'排行榜')都不是非零,因为 Objective C 喜欢在这种情况下默默地失败。

于 2013-08-03T13:30:32.587 回答