我发现此身份验证代码在 iOS 8 中运行良好。
- (void)authenticateLocalPlayer
GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer];
if (localPlayer.isAuthenticated) {
[[NSNotificationCenter defaultCenter] postNotificationName:LocalPlayerIsAuthenticated object:nil];
return;
}
localPlayer.authenticateHandler =
^(UIViewController *viewController, NSError *error) {
[self setLastError:error];
if(viewController != nil){
[self setAuthenticationViewController:viewController];
} else if([GKLocalPlayer localPlayer].isAuthenticated) {
NSLog(@"connected to gk");
_GKConnected = YES;
[[NSNotificationCenter defaultCenter] postNotificationName:LocalPlayerIsAuthenticated object:nil];
}
else {
_GKConnected = NO;
}
};
// REGISTER LISTENER FOR INVITES
[localPlayer registerListener:self];
}
通知字符串可以是任何常量字符串(最好为反向 DNS 加上前缀以与 NotificationCenter 一起使用org.myapp.notificationname
)。
在最初的 OP 问题中,检索authenticated
属性的 getter 时出错GKPlayer
:属性名称是authenticated
,但 getter 必须是isAuthenticated
。
找出这些语义拼写错误可能很简单,而编译器不会警告您,因为它可能是使用点符号访问的简单属性背后的更多代码,默认情况下,setter 以is
.
顺便说一句,我可以使用工作示例教程添加一个众所周知的教程的链接:
http://www.raywenderlich.com/60998/game-center-tutorial-how-to-make-a-simple-multiplayer-game-with-sprite-kit-part-2