这是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>