将事件侦听器添加到基于回合的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 GameKitHelper : NSObject <GKTurnBasedMatchmakerViewControllerDelegate, GKTurnBasedEventListener>

这是警告

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

我觉得我犯了一个很容易纠正的错误,但我不明白是什么,你们中有人能帮我吗?

额外信息

  • 我在spritkit中执行此操作
[blockLocalPlayer registerListener:self];

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

您应该通过更改以下内容将一致性声明添加到GKLocalPlayerListener中:

@interface GameKitHelper : NSObject <GKTurnBasedMatchmakerViewControllerDelegate, GKTurnBasedEventListener>

到此:

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

最新更新