我在使用iOS 6 SDK的应用程序中整合游戏中心时出现问题。 事实上,我使用Apple的示例代码,但看起来不完整:
我试过这段代码:
-(void) authenticateLocalPlayer {
GKLocalPlayer* localPlayer =
[GKLocalPlayer localPlayer];
localPlayer.authenticateHandler =
^(UIViewController *loginVC,
NSError *error) {
[self setLastError:error];
if ([GKLocalPlayer localPlayer].authenticated)
{
// authentication successful
[self enableGameCenterForPlayer:[GKLocalPlayer localPlayer]];
}
else if (loginVC)
{
// player not logged in yet, present the vc
[self pauseGame];
[self presentLoginVC:loginVC];
}
else
{
// authentication failed, provide graceful fallback
[self disableGameCenter];
}
};
}
但问题是enableGameCenterForPlayer
,pauseGame
,presentLoginVC
,disableGameCenter未实现方法,并返回:
Instance method '-enableGameCenterForPlayer:' not found (return type defaults to 'id')
如何解决此问题?
由于
答案 0 :(得分:1)
我使用方法[self presentLoginVC:VC]来传递我的UITabViewController或UINavigationController viewController,因为下面的块不在主线程上。
localPlayer.authenticateHandler = ^(UIViewController *loginVC, NSError *error) {
当你在一个街区时,你应该确保不要更改UI元素,因为你真的不知道它什么时候完成或者你将在你的应用程序中。可能有很多方法可以做到这一点,但这是我的解决方案。
下面是我的UITabBarController'类'.m文件(没有子类化的类的方法的添加)我创建了方法presentLoginVC,只需通过我的UITabBarController调用'showGameCenterViewController':
#import "UITabBarController+GameKitAdditions.h"
@implementation UITabBarController (GameKitAdditions)
-(void) showGameCenterViewController: (UIViewController *)VC {
[self presentViewController:VC animated:NO completion:nil];
}
-(void)dismissGameCenterViewController:(UIViewController *)VC {
[self dismissViewControllerAnimated:YES completion:nil];
}
@end
至于其他功能:
-(void) enableGameCenterForPlayer:(GKLocalPlayer *) localPlayer;
-(void) disableGameCenter;
-(void) pauseGame;
它们可以像将一个名为enableGameCenter的BOOL设置为YES或NO一样简单。要解决错误,您可以将这些原型添加到.h文件中,然后编写函数只是为了向NSLog()输出内容。