我正试图在我的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(登录界面)。
答案 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];
}
}];
然而,我发现这完全没用,它甚至在调用处理程序之前就会显示登录对话框。