我正在尝试将Apple的游戏中心集成到我的应用程序中。我可以将分数成功发布到排行榜,并显示排行榜,但是当我尝试关闭排行榜模式 View 时,问题就来了。我已经从Game Kit编程指南([url] http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/GameKit_Guide/LeaderBoards/LeaderBoards.html [/ url])中遵循了苹果的代码指导。 。
我的代码如下:Game Center:
-(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。我已经尝试了各种变体,但对于它为什么会给我带来错误,我完全感到困惑。
任何帮助或建议,将不胜感激。
提前致谢!
最佳答案
我的应用程序上只有一个非常相似的问题。我发现它与ModalViewController本身无关,但与显示它的 View Controller 有关。
如果使用事件探查器中的“僵尸”选项对应用程序进行事件探查,您将能够看到正在释放的内容不应该被释放(很可能是UIImage或UIView)。您应该能够找到分配了僵尸对象的函数,以查找引起问题的真实对象。
我以为该错误显示在取消ModalViewController时出现的原因是,对话框消失后调用了各种 View 元素以重绘或刷新,然后访问了一些本不应该被释放的内容。
希望这可以帮助。