Gamecenter 设置验证处理程序崩溃

Posted

技术标签:

【中文标题】Gamecenter 设置验证处理程序崩溃【英文标题】:Gamecenter setting authenticate handler crashes 【发布时间】:2018-06-21 05:10:13 【问题描述】:
func authenticateLocalPlayer(player: GKLocalPlayer) 
        player.authenticateHandler =
            ( (viewController : UIViewController!, error : NSError!) -> Void in
                if viewController != nil 
                    self.present(viewController, animated:true, completion: nil)
                 else 

                
                 as! (UIViewController?, Error?) -> Void)

    

这会在最后一行冻结 - as! (UIViewController?,错误?)-> 无效)

除此之外,堆栈跟踪中没有任何内容.. 只是冻结执行。这里发生了什么?

如何设置身份验证处理程序?

鼠标悬停:线程 1:EXC_BREAKPOINT (code=EXC_ARM_BREAKPOINT, subcode=0xe7ffdefe)

【问题讨论】:

【参考方案1】:

这是因为您声明了错误的处理程序并试图通过将其强制转换为 as! (UIViewController?, Error?) -> Void 来修复它,这显然会失败,因为这些类型不一样。

它应该是这样的:

player.authenticateHandler =
        ( (viewController : UIViewController?, error : Error?) -> Void in
            if let vc = viewController 
                self.present(vc, animated:true, completion: nil)
             else 

            
        )

确保您不要过于信任 Xcode,并自己仔细检查类型。

【讨论】:

以上是关于Gamecenter 设置验证处理程序崩溃的主要内容,如果未能解决你的问题,请参考以下文章

iOS 6 Game Center 在身份验证时崩溃

iOS6 上的 GKLocalPlayer 身份验证崩溃并出现模态转换错误

显示排行榜崩溃应用程序,因为不支持 showViewController

使用 Firebase 身份验证时应用程序崩溃,原因:“已配置默认应用程序。”

NSError 奇怪的问题 - 尝试访问 NSError 的属性时应用程序崩溃

Cocos2d Gamecenter 因方向问题导致 iOS6 崩溃