所以我有一个使用游戏中心的游戏,我使用了在线教程。它在视图加载时对用户进行身份验证。要查看您的排行榜和成就,请按一个按钮,该代码与身份验证是分开的。一切正常,直到我以飞行模式启动应用程序。由于某种原因,由于无法连接到 Game Center 服务器,因此放弃并崩溃。
身份验证代码(ViewController.m、viewDidLoad)
if ([GKLocalPlayer localPlayer].authenticated == NO) {
GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer];
[localPlayer setAuthenticateHandler:(^(UIViewController* viewcontroller, NSError *error) {
})];
} else {
NSLog(@"Already authenticated!");
}
另外,我不认为这是导致问题的原因,因为它在启动时崩溃,而且我不知道此代码是否在启动时运行。(我从教程中复制了大部分代码)但这里是:
(GCHelper.m)
#pragma mark Authentication
- (void)authenticationChanged {
if ([GKLocalPlayer localPlayer].isAuthenticated && !userAuthenticated) {
NSLog(@"Authentication changed: player authenticated.");
userAuthenticated = TRUE;
[self loadLeaderBoardInfo];
// [self loadAchievements];
} else if (![GKLocalPlayer localPlayer].isAuthenticated && userAuthenticated) {
NSLog(@"Authentication changed: player not authenticated.");
userAuthenticated = FALSE;
}
}
- (void)authenticateLocalUserOnViewController:(UIViewController*)viewController
setCallbackObject:(id)obj
withPauseSelector:(SEL)selector
{
if (!gameCenterAvailable) return;
GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer];
NSLog(@"Authenticating local user...");
if (localPlayer.authenticated == NO) {
[localPlayer setAuthenticateHandler:^(UIViewController* authViewController, NSError *error) {
if (authViewController != nil) {
if (obj) {
[obj performSelector:selector withObject:nil afterDelay:0];
}
[viewController presentViewController:authViewController animated:YES completion:^ {
}];
} else if (error != nil) {
// process error
}
}];
}
else {
NSLog(@"Already authenticated!");
}
}
我的问题是,为什么它在飞行模式下启动时会崩溃?这是错误消息:
2014-10-28 16:18:05.895 Rock Paper Scissors Challenge [10372:704073] -[GKLocalPlayerInternal name]:无法识别的选择器发送到实例 0x7ced9750
2014-10-28 16:18:05.992 Rock Paper Scissors Challenge[10372:704073] * 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[GKLocalPlayerInternal name]:无法识别的选择器发送到实例 0x7ced9750”*第一次抛出调用堆:
100% 的时间它在飞行模式下崩溃,100% 的时间它工作,当我不处于飞行模式时它说“欢迎回来”我不明白
请帮忙,谢谢!