iOS 5.0模拟器:GKLeaderBoardViewController未显示
以下代码在iOS 6.0(模拟器和设备)上运行良好。游戏中心布置得很好。但它在iOS5.0模拟器上什么也不做。不幸的是,我没有配备iOS 5.0的设备,因此我无法检查它是否与模拟器相关iOS 5.0模拟器:GKLeaderBoardViewController未显示,ios,objective-c,ios-simulator,game-center,Ios,Objective C,Ios Simulator,Game Center,以下代码在iOS 6.0(模拟器和设备)上运行良好。游戏中心布置得很好。但它在iOS5.0模拟器上什么也不做。不幸的是,我没有配备iOS 5.0的设备,因此我无法检查它是否与模拟器相关 - (void)showLeaderboard:(NSString *)leaderboard { GKLeaderboardViewController * leaderboardViewController = [[GKLeaderboardViewController alloc] init];
- (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];
}
那么会发生什么呢?没有什么。没有提出任何意见。它不会将任何消息记录到控制台中。它甚至没有到达完成块。
我试着到处玩,这是我设法弄明白的。我使用从gkleadsboardviewcontroller
继承的CustomLeaderboardViewController,而不是纯gkleadsboardviewcontroller
,并在shouldAutorotateToInterfaceOrientation方法中放置断点。它不使用上面的代码启动。但是如果我使用
setCategory:nil
而不是
setCategory:排行榜
然后触发断点。仍然没有进一步发生任何事情,也没有调用完成块。
有没有想过为什么会发生这样的事情?结果只是一个愚蠢的错误。[[UIApplication sharedApplication]delegate].window.rootViewController为零,因为它在iOS 5.0中从未设置过。请确保您的变量(例如,“排行榜”)都不是非零,因为在这种情况下,Objective C喜欢无声地失败。需要检查两件事:您确定排行榜和ViewController都不是零吗[[UIApplication sharedApplication]delegate].window.rootViewController非零?排行榜如何?您是否也尝试过在调试和发布之间切换,以确保排行榜不会过早发布?您是否在控制台中看到任何日志输出?是的,您是对的,[[UIApplication sharedApplication]委派].window.rootViewController为零。这是一个多么愚蠢的错误!这就是当你复制粘贴太多时得到的结果:(.Cool!如果你将我的最新答案标记为正确,我将不胜感激。谢谢。