在OSX上实现GameKit.framework,无法验证localPlayer

时间:2013-07-25 15:21:08

标签: cocoa gamekit

我正试图在我的OSX游戏中实现GameKit。不幸的是,我找不到有关如何做到这一点的更多信息;所有教程似乎都是iOS(虽然the documentation clearly states“游戏中心在iOS和OS X上可用”。

一切都很好;当我尝试验证本地用户时出现问题:

    [[GKLocalPlayer localPlayer] setAuthenticateHandler:^(id viewController, NSError *error) {
        if(error) {
          DLog(@"Error: %@",error);// This is always returning an error
        }
        else if(viewController) {
          // WHAT DO I DO HERE??
        }
      }];

我有两个问题:

首先,处理程序总是出错:Error Domain=GKErrorDomain Code=6 "The requested operation could not be completed because local player has not been authenticated." UserInfo=0x10103bc70 {NSLocalizedDescription=The requested operation could not be completed because local player has not been authenticated.}

其次,我不知道如何呈现视图控制器。

在iPhone上,这段代码运行正常:没有错误,我只是提供了viewController(登录界面)。

2 个答案:

答案 0 :(得分:1)

对不起,我意识到我的回答差不多晚了一年,但如果仍然像其他人那样仍然像我一样提出这个问题。 Ed Marty大多是正确的,但我发现对我有用的是这个。

[[GKLocalPlayer localPlayer] setAuthenticateHandler:^(NSViewController < GKViewController >  viewController, NSError *error) {

          if(error) {
             NSLog(@"Error: %@",error);
          }
          else if(viewController) {
            GKDialogController *presenter = [GKDialogController sharedDialogController];
            presenter.parentWindow = myWindow;
            [presenter presentViewController:viewController];
         }
}];

主要区别在于使用符合GKViewController的NSViewController而不是id。(另外,我使用的是NSLog而不是DLog,但这并不重要。)

&#34;但是,我发现这完全没用,它甚至在调用处理程序之前就会显示登录对话框。&#34;

要确保其有效,请通过您的应用设置新的Game Center帐户。当您运行程序并加载一个窗口供您登录时,请按&#34;创建新的Apple ID&#34;即使您已经拥有Apple ID。该按钮可能无法使用,因此如果是这种情况,请打开游戏中心并按“创建新的Apple ID”。无论哪种方式,您的目标是创建一个&#34; Sandboxed&#34;游戏中心帐户,您可以在此处了解更多信息:https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/GameKit_Guide/TestingYourGameCenter-AwareGame/TestingYourGameCenter-AwareGame.html#//apple_ref/doc/uid/TP40008304-CH17-SW1

如果您在阅读条款和条件,单词&#34; Sandbox&#34;出现在左上方的黄色横幅上。再一次,我很抱歉我迟到了,但希望这能为所有未来的观众清除这个主题。

P.S。对不起,代码格式不正确。

答案 1 :(得分:0)

我发现OSX的GameKit文档非常缺乏,误导,有时甚至是完全错误的。也就是说,根据this document,这就是所谓的要做的事情:

[[GKLocalPlayer localPlayer] setAuthenticateHandler:^(id viewController, NSError *error) {
    if(error) {
      DLog(@"Error: %@",error);// This is always returning an error
    }
    else if(viewController) {
      GKDialogController *presenter = [GKDialogController sharedDialogController];
      presenter.parentWindow = myWindow;
      [presenter presentViewController:viewController];
    }
  }];
然而,我发现这完全没用,它甚至在调用处理程序之前就会显示登录对话框。