1

这是我第一次涉足 xcode 和 Objective-c 的世界,所以请多多包涵。我一直在按照谷歌开发者网站上列出的步骤在 ios 上实现谷歌玩游戏服务: https ://developers.google.com/games/services/ios/quickstart

步骤 1-7 工作正常,我可以使用 GPSignIn 对象登录 Google+:

完成授权。2013-05-28 02:37:19.718 MyApp[2012:907] 成功登录 Google!Auth 对象为 GTMOAuth2Authentication 0x1d56ab40:{accessToken="ya29.AHES6ZQa59aGdKmrWhKSN0ie_S_CqgLfBqKzlmHXU0Cpnxs", refreshToken="1/A8dCPhVKRRgbsM4Gcp4qlkhNJc9SyyTUEVssN3A-Iro", expirationDate="02013-05-0000003-05-2"

一旦我实施了第 8 步,尽管 GPGManager 登录功能似乎发生了崩溃,我已经像这样实施了:

-(void)startGoogleGamesSignIn
    {
      // The GPPSignIn object has an auth token now. Pass it to the GPGManager.
      [[GPGManager sharedInstance] signIn:[GPPSignIn sharedInstance]
           reauthorizeHandler:^(BOOL requiresKeychainWipe, NSError *error) {
             // If you hit this, auth has failed and you need to authenticate.
             // Most likely you can refresh behind the scenes
             if (requiresKeychainWipe) {
               [[GPPSignIn sharedInstance] signOut];
             }
             [[GPPSignIn sharedInstance] authenticate];
           }];
    }

调试日志:

013-05-28 02:16:04.742 MyApp[1970:907] 打印 gppsignin 实例 = 2013-05-28 02:16:04.781 MyApp[1970:907] 打印 gpgmanager 实例 = 2013-05-28 02:16 :04.785 MyApp [1970:907] *由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'* - [__NSPlaceholderArray initWithObjects:count:]:尝试从objects [0]插入nil对象' *第一次抛出调用堆栈:( 0x3375d2a3 0x3b3db97f 0x336a734d 0x336a7a79 0x57089 0x56bf5 0x57f2d 0x37bd1 0x36331 0xb27f 0xb10b 0x2edcd 0x108d7 0x340986fd 0x33fd81f9 0x33fd8115 0x3343a45f 0x33439b43 0x33461fcb 0x336a374d 0x3346242b 0x333c603d 0x33732683 0x33731ee9 0x33730cb7 0x336a3ebd 0x336a3d49 0x372562eb 0x355b9301 0xab3d 0x3b812b20) libc++abi.dylib: terminate called throwing an exception (lldb)

据我所知,我的代码中没有使用任何 NSArray,也无法获得正确的调用堆栈。有没有其他人在玩这个得到类似的问题?

4

3 回答 3

1

这是因为您忘记在您的 xcode 项目中添加 PlayGameServices.bundle,如https://developers.google.com/games/services/ios/quickstart上的入门指南

资料来源:我有同样的问题。

于 2013-07-31T18:47:54.913 回答
1

官方文档没有把这种区别说得很清楚:不像PlayGameServices.frameworkwhich 必须添加到Link Binary With Libraries构建阶段PlayGameServices.bundle,必须添加到Copy Bundle Resources构建阶段。

PS:感谢farroid指出问题的原因。

于 2013-10-18T01:16:09.497 回答
0

添加一个所有异常断点,然后当断点被命中时,您可以image lookup --address在控制台上使用跟踪文本中的地址来找出问题所在。当你把它交给 GPP 类时,你认为存在的东西很可能是 nil 。

于 2013-05-28T21:54:25.323 回答