ios – Swift – 集成GameCenter以使用排行榜
我在斯威夫特做一个游戏.我希望能够使用GameCenter发布用户的分数,以便可以看到所有用户的分数.但是,我花了一天时间试图弄清楚如何做到这一点,但我没有找到任何有用的指示.
我对iOS编程和Swift都很陌生,而且关于这个主题的信息非常少,所有这些都是用Objective-C编写的. 任何人都可以帮我将GameCenter集成到我的应用程序中,这样我就可以将用户分数发布到排行榜上供人们查看吗? 编辑:我已经在iTunesConnect上创建了一个GameCenter排行榜. 编辑2:我尝试过本教程:http://www.appcoda.com/ios-game-kit-framework/并将其转换为Swift.我转换了这个: -(void)authenticateLocalPlayer { GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer]; localPlayer.authenticateHandler = ^(UIViewController *viewController,NSError *error){ if (viewController != nil) { [self presentViewController:viewController animated:YES completion:nil]; } else{ if ([GKLocalPlayer localPlayer].authenticated) { _gameCenterEnabled = YES; // Get the default leaderboard identifier. [[GKLocalPlayer localPlayer] loadDefaultLeaderboardIdentifierWithCompletionHandler:^(NSString *leaderboardIdentifier,NSError *error) { if (error != nil) { NSLog(@"%@",[error localizedDescription]); } else{ _leaderboardIdentifier = leaderboardIdentifier; } }]; } else { _gameCenterEnabled = NO; } } }; } 进入这个: func authenticateLocalPlayer() { var localPlayer : GKLocalPlayer! localPlayer.authenticateHandler = {(viewController : MenuViewController!,error : NSError!) -> Void in if viewController != nil { self.presentViewController(viewController,animated: true,completion: nil) } else { if localPlayer.authenticated { self.gameCenterEnabled = true localPlayer.loadDefaultLeaderboardIdentifierWithCompletionHandler({ (leaderboardIdentifier : String!,error : NSError!) -> Void in if error != nil { println(error.localizedDescription) } else { self.leaderboardIdentifier = leaderboardIdentifier } }) } else { self.gameCenterEnabled = false } } } } 但它崩溃了这条线: localPlayer.authenticateHandler = {(viewController : UIViewController!,error : NSError!) -> Void in 错误消息是:
我不敢相信这有多难! 解决方法
您的具体问题与Game Center无关,并且正在发生,因为您有行var localPlayer:GKLocalPlayer!.
您正在声明一个隐式解包的可选项,然后立即使用它.当您尝试设置localPlayer.authenticateHandler时,后续行中的值为nil. 相反,您应该像这样实例化GKLocalPlayer: var localPlayer = GKLocalPlayer() 请注意,目前Game Center和Swift存在问题.您的代码将起作用,但localPlayer.authenticated永远不会设置为true.此问题在此处进行了跟踪: http://www.openradar.me/17825348 相信:http://www.stuarticus.net/blog/2014/7/game-center-authentication-and-swift提交雷达票. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |