我的应用程序记录了它是否已成功通过Game Center进行身份验证.当它开始新游戏或用户查看分数列表时,如果本地播放器未成功通过身份验证,并且该应用程序当时未尝试对用户进行身份验证,则会再次尝试.

(为什么?如果您从无网络区域移动到网络区域.)

不幸的是,在iOS6 / XCode 4.5下,它开始崩溃了.或者至少在某些有限的情况下似乎:用户无法使用错误的密码和/或不存在的帐户登录.成功登录后,一切顺利.

在登录失败之后,当我去做一些导致进行reauth检查的事情时,我得到了这个:

2012-09-25 15:54:47.829 APP NAME [1493:907] *
Assertion failure in -[UIWindowController
transition:fromViewController:toViewController:target:didEndSelector:],
/SourceCache/UIKit/UIKit-2372/UIWindowController.m:211

然后这实际上崩溃了:

2012-09-25 15:55:25.569 APP NAME [1493:907] *
Terminating app due to uncaught exception
‘NSInternalInconsistencyException’,reason: ‘Attempting to begin a
modal transition from <GKModalRootViewController: 0x1cd8b2a0> to
<GKHostedAuthenticateViewController: 0x1e31a350> while a transition is
already in progress. Wait for viewDidAppear/viewDiddisappear to kNow
the current transition has completed’
*
First throw call stack: (0x394932a3 0x31db297f 0x3949315d 0x383fd2af 0x3640377b 0x36402fcf 0x394969c4 0x393edfeb 0x36521733
0x32a83d2d 0x3264b11f 0x3264a4b7 0x3264f1bd 0x39466f3b 0x393d9ebd
0x393d9d49 0x353132eb 0x3636b301 0x7e863 0x7e808) libc++abi.dylib:
terminate called throwing an exception

这是麻烦的代码:

-(void)authenticateLocalUser {

    if (!self.checkingLocalPlayer) {
        self.checkingLocalPlayer = YES;
        GKLocalPlayer *thisPlayer = [GKLocalPlayer localPlayer];

        if (!thisPlayer.authenticated) {

            [[GKLocalPlayer localPlayer]
             authenticateWithCompletionHandler:^(NSError *error)
             {
                 [self finishGameCenterauthWithError:error];
             }
             ];
        }
    }
}

知道我在这里做错了吗?

解决方法

Ggrrrhhh同样的问题,想想我发现它… ios6已弃用authenticateWithCompletionHandler看到链接,建议你使用AuthenticateHandler.

http://developer.apple.com/library/IOS/#documentation/GameKit/Reference/GKLocalPlayer_Ref/Reference/Reference.html#//apple_ref/occ/instp/GKLocalPlayer/authenticateHandler

这似乎有效……

GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer];
[localPlayer setAuthenticateHandler:(^(UIViewController* viewcontroller,NSError *error) {

//[localPlayer authenticateWithCompletionHandler:^(NSError *error) { OLD CODE!
    if (localPlayer.isAuthenticated)
    {
        //do some stuff
    }
    else {

        UIAlertView *alertView = [[UIAlertView alloc]
                                  initWithTitle:@"NOT AUTHORISED"
                                  message:@"YOUR'RE NOT LOGGED INTO GC."
                                  delegate:self
                                  cancelButtonTitle:@"OK"
                                  otherButtonTitles:nil];
        [alertView show];

    }
})];

GKLocalPlayer在iOS6上使用模态转换错误进行Auth崩溃的更多相关文章

  1. GKLocalPlayer在iOS6上使用模态转换错误进行Auth崩溃

    我的应用程序记录了它是否已成功通过GameCenter进行身份验证.当它开始新游戏或用户查看分数列表时,如果本地播放器未成功通过身份验证,并且该应用程序当时未尝试对用户进行身份验证,则会再次尝试.(为什么?解决方法Ggrrrhhh同样的问题,想想我发现它…

  2. ios – 使用Game Center验证GKLocalPlayer

    我正在尝试使用GameCenter验证GKLocalPlayer.但是,Apple提供的代码似乎没有为我做的伎俩.我总是收到警告“无法连接到GameCenter服务器”.选择“重试”或“取消”.两个NSLog语句都没有被执行,所以我猜到甚至没有触发completionHandler.如果我按重试,我会收到以下错误:任何人都知道出了什么问题?解决方法我发现连接到GameCenter时遇到的一个问题是您的日期可能在设备上出错.检查您的日期是否是实际当前日期.不知何故,GameCenter不允许来自日期不正确的

  3. Android活动 – 远程服务helpl双向连接

    我有两个问题:>我知道对于连接活动和远程服务,我必须使用AIDL.我尝试过这个工作,但我只能找到一个单向的连接示例.简单来说–从服务(按活动)读取东西.但是我需要解决将某些数据发送到活动.这是非常重要的,因为服务必须在一些事件之后立即发送一些信息.>是否可以从远程服务端面再次关闭应用程序(活动)?

  4. 批处理文件 – 带有Windows批处理文件的SQLPLUS命令行

    我想创建一个批处理文件,它将打开sqlPLUS[CLI]并执行一些存储的sql文件,并将输出存储到文本文件中.所以我创建了这个批处理文件[不起作用].这些sql文件包含sql,它返回表中的最大数字.问题是它在打开sqlPLUS后不执行sql文件>WindowsXP>Oracle9i原生sql*加假脱机怎么样?

  5. CentOS 6.5 安装 rlwrap软件for sqlplus

    CentOS6.5安装rlwrap软件forsqlplus目的:解决sqlplus连接oracle的方便使用(如左右键,上下键的灵活使用)提示:依yum方式安装,需要连接第三方的yum源,因为centos默认的yum源中没有rlwarap组件步骤1.root用户登入OS2.#rpm-ivhhttp://download.fedoraproject.org/pub/epel/6/x86_64/epe

  6. ios – 以编程方式/手动创建MKPlacemark / CLPlacemark

    我已经反向地理编码,并希望避免这样的查询.什么可以添加到字典?谢谢.解决方法你可以继承MKPlacemark:在MyPlacemark.h在MyPlacemark.m中:它看起来很丑,但这是迄今为止我发现工作的唯一方法.

  7. ios – GKLocalPlayer和saveGameData的问题

    我想使用GKLocalPlayer和saveGameData方法保存游戏数据.上面的代码在xcode模拟器上工作正常,但是当我在iPhone上尝试时,会收到如下所示的错误代码.我无法理解这一点.我无法控制在哪里可以保存游戏数据,所以为什么系统试图在没有权限的情况下保存它?解决方法我改变了SaveGame的名字,错误消失了.

随机推荐

  1. iOS实现拖拽View跟随手指浮动效果

    这篇文章主要为大家详细介绍了iOS实现拖拽View跟随手指浮动,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  2. iOS – genstrings:无法连接到输出目录en.lproj

    使用我桌面上的项目文件夹,我启动终端输入:cd然后将我的项目文件夹拖到终端,它给了我路径.然后我将这行代码粘贴到终端中找.-name*.m|xargsgenstrings-oen.lproj我在终端中收到此错误消息:genstrings:无法连接到输出目录en.lproj它多次打印这行,然后说我的项目是一个目录的路径?没有.strings文件.对我做错了什么的想法?

  3. iOS 7 UIButtonBarItem图像没有色调

    如何确保按钮图标采用全局色调?解决方法只是想将其转换为根注释,以便为“回答”复选标记提供更好的上下文,并提供更好的格式.我能想出这个!

  4. ios – 在自定义相机层的AVFoundation中自动对焦和自动曝光

    为AVFoundation定制图层相机创建精确的自动对焦和曝光的最佳方法是什么?

  5. ios – Xcode找不到Alamofire,错误:没有这样的模块’Alamofire’

    我正在尝试按照github(https://github.com/Alamofire/Alamofire#cocoapods)指令将Alamofire包含在我的Swift项目中.我创建了一个新项目,导航到项目目录并运行此命令sudogeminstallcocoapods.然后我面临以下错误:搜索后我设法通过运行此命令安装cocoapodssudogeminstall-n/usr/local/bin

  6. ios – 在没有iPhone6s或更新的情况下测试ARKit

    我在决定下载Xcode9之前.我想玩新的框架–ARKit.我知道要用ARKit运行app我需要一个带有A9芯片或更新版本的设备.不幸的是我有一个较旧的.我的问题是已经下载了新Xcode的人.在我的情况下有可能运行ARKit应用程序吗?那个或其他任何模拟器?任何想法或我将不得不购买新设备?解决方法任何iOS11设备都可以使用ARKit,但是具有高质量AR体验的全球跟踪功能需要使用A9或更高版本处理器的设备.使用iOS11测试版更新您的设备是必要的.

  7. 将iOS应用移植到Android

    我们制作了一个具有2000个目标c类的退出大型iOS应用程序.我想知道有一个最佳实践指南将其移植到Android?此外,由于我们的应用程序大量使用UINavigation和UIView控制器,我想知道在Android上有类似的模型和实现.谢谢到目前为止,guenter解决方法老实说,我认为你正在计划的只是制作难以维护的糟糕代码.我意识到这听起来像很多工作,但从长远来看它会更容易,我只是将应用程序的概念“移植”到android并从头开始编写.

  8. ios – 在Swift中覆盖Objective C类方法

    我是Swift的初学者,我正在尝试在Swift项目中使用JSONModel.我想从JSONModel覆盖方法keyMapper,但我没有找到如何覆盖模型类中的Objective-C类方法.该方法的签名是:我怎样才能做到这一点?解决方法您可以像覆盖实例方法一样执行此操作,但使用class关键字除外:

  9. ios – 在WKWebView中获取链接URL

    我想在WKWebView中获取tapped链接的url.链接采用自定义格式,可触发应用中的某些操作.例如HTTP://我的网站/帮助#深层链接对讲.我这样使用KVO:这在第一次点击链接时效果很好.但是,如果我连续两次点击相同的链接,它将不报告链接点击.是否有解决方法来解决这个问题,以便我可以检测每个点击并获取链接?任何关于这个的指针都会很棒!解决方法像这样更改addobserver在observeValue函数中,您可以获得两个值

  10. ios – 在Swift的UIView中找到UILabel

    我正在尝试在我的UIViewControllers的超级视图中找到我的UILabels.这是我的代码:这是在Objective-C中推荐的方式,但是在Swift中我只得到UIViews和CALayer.我肯定在提供给这个方法的视图中有UILabel.我错过了什么?我的UIViewController中的调用:解决方法使用函数式编程概念可以更轻松地实现这一目标.

返回
顶部