我正在尝试使用swift来对本地播放器进行身份验证,但是每次我为.authenticated属性获取错误值时,都无法使用。这是我正在使用的代码,应用启动时,主视图控制器会调用它。
func authenticateLocalPlayer(){ var localPlayer = GKLocalPlayer() localPlayer.authenticateHandler = {(viewController, error) -> Void in if viewController { self.presentViewController(viewController, animated: true, completion: nil) }else{ println((GKLocalPlayer().authenticated)) } } }
它可以很好地显示登录视图,但是当我输入测试帐户登录名时,它只是将GKLocalPlayer().authenticatedas 返回为false。iTunes Connect中的捆绑包标识符和info.plist完全相同,版本和应用程序名称也相同。iTunes Connect和Xcode都为Game Center启用了所有功能,但我感觉这不是编码错误,这是某个地方的应用程序记录中的设置错误,但我终生无法找到。
GKLocalPlayer().authenticated
进一步修改后,出现此错误:
错误域= GKErrorDomain代码= 15“由于游戏中心无法识别此应用程序,因此无法完成请求的操作。” UserInfo = 0x17006b300
我不知道为什么会这样,bundle ID,名称和版本都匹配…
任何帮助将不胜感激。
Apple已解决了此问题-只需致电:
GKLocalPlayer.localPlayer()
以前的问题是GKLocalPlayer()不返回GKLocalPlayer单例,而是返回一个新的GKLocalPlayer实例。
GKLocalPlayer()
如果您使用的是Xcode 6 BETA,则可以添加C函数或Objective- C方法来返回真正的GKLocalPlayer单例,然后在Swift中使用它。这是我的解决方法的要点(使用错误的命名约定):
在Objective-C标头中:
GKLocalPlayer *getLocalPlayer(void);
在Objective-C实现中:
GKLocalPlayer *getLocalPlayer(void) { return [GKLocalPlayer localPlayer]; }
在您的桥接标题中:
#import "ThatHeader.h"
然后,每当需要在Swift中访问GKLocalPlayer单例时,都可以使用getLocalPlayer()代替GKLocalPlayer()。将其保留在GKLocalPlayer类别的方法中可能是一个更好的主意。
getLocalPlayer()
但是,如上所述,这不再是必需的。