警告添加事件监听器回合基于IOS的游戏

这里是gamekithelper.m中的代码

- (void)authenticateLocalPlayer { //1 GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer]; //add a weak local player __weak GKLocalPlayer *blockLocalPlayer = localPlayer; if (localPlayer.isAuthenticated) { [[NSNotificationCenter defaultCenter] postNotificationName:LocalPlayerIsAuthenticated object:nil]; return; } //2 localPlayer.authenticateHandler = ^(UIViewController *viewController, NSError *error) { //3 [self setLastError:error]; if(viewController != nil) { //4 [self setAuthenticationViewController:viewController]; *******problem code************ // add event handler [blockLocalPlayer registerListener:self]; } else if([GKLocalPlayer localPlayer].isAuthenticated) { //5 _enableGameCenter = YES; [[NSNotificationCenter defaultCenter] postNotificationName:LocalPlayerIsAuthenticated object:nil]; *******problem code************ // add event handler [blockLocalPlayer registerListener:self]; } else { //6 _enableGameCenter = NO; } }; } 

这里是gamekithelper.h中的@interface

 @interface GameKitHelper : NSObject <GKTurnBasedMatchmakerViewControllerDelegate, GKTurnBasedEventListener> 

这是警告

 Sending 'GameKitHelper *const __strong' to parameter of incompatible type 'id<GKLocalPlayerListener>' 

我觉得我正在犯一个容易解决的错误,但是我不知道它是什么,你们能帮助我吗?

额外的信息

  • 我在spritekit中这样做

 [blockLocalPlayer registerListener:self]; 

该方法接受符合协议GKLocalPlayerListener的对象。 正如你在界面中看到的, GameKitHelper没有声明它符合GKLocalPlayerListener协议。

您应该通过更改这个来向GKLocalPlayerListener添加一致性声明:

 @interface GameKitHelper : NSObject <GKTurnBasedMatchmakerViewControllerDelegate, GKTurnBasedEventListener> 

对此:

 @interface GameKitHelper : NSObject <GKLocalPlayerListener, GKTurnBasedMatchmakerViewControllerDelegate, GKTurnBasedEventListener>