[GKMatchmaker sharedMatchmaker] .inviteHandler在iOS 7中已弃用,但GameKit指南仍然说要以这种方式设置它。有谁知道我们应该在iOS 7实时游戏邀请中使用什么?有几个监听器类的新类/方法,但没有一个特别针对我所见过的。
'inviteHandler' is deprecated: first deprecated in iOS 7.0
答案 0 :(得分:4)
所以我开始对此感到非常沮丧(几乎神奇地,昨天我的控制台中出现了弃用警告)。 Apple似乎没有说明如何将对象设置为实现新GKLocalPlayerListener协议的东西。
我是这样做的。在对本地播放器进行身份验证之后,我将实现GKLocalPlayerListener协议(在本例中为self)的对象注册为监听器。我测试了我的应用程序如何响应相同的Game Center事件,并且已做出相应的响应。我相信这是正确的方法,尽管我仍在质疑哪个地方最适合注册听众。我认为在播放器通过身份验证后进行此操作是有道理的,但它可能比这更微妙。
NSLog(@"Authenticating local user...");
__weak GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer];
localPlayer.authenticateHandler =
^(UIViewController *viewController,
NSError *error) {
[self setLastError:error];
if (localPlayer.isAuthenticated) {
[localPlayer registerListener:self];
} else if(viewController) {
[self presentViewController:viewController];
} else {
}
};
您还希望避免多次注册侦听器。这有点像为本地通知注册观察者。如果你不止一次这样做,你的监听器方法最终会被多次调用。
我相信替换的方法:
-(void)handleInviteFromGameCenter:(NSArray *)playersToInvite;
以下是:
-(void)player:(GKPlayer *)player didRequestMatchWithPlayers:(NSArray *)playerIDsToInvite;
通过阅读文档,可以看到在调用它时创建一个GKMatchMakerViewController(或类似的东西,更多一些定制)。我知道这就是我在我的应用程序的早期版本中所做的事情,所以它不会那么遥远。该方法的结构也非常相似。
更多测试将确认这是否确实是接近新协议的正确方法,但到目前为止似乎是正确的。我将继续这样做,直到另有指示。
答案 1 :(得分:1)
看起来预期的替换是GKInviteEventListener
协议。您可以在GKLocalPlayer.h中看到对它的引用; GKLocalPlayerListener
协议扩展了它。
但是,这个协议的文档有限(您可以在Xcode 5的文档窗口中搜索它,但我没有在网上看到它。)
鉴于缺少文档,现在继续使用已弃用的方法可能是最安全的。无论如何,你还需要继续使用iOS6。
答案 2 :(得分:0)
如果你正在运行GKTurnBasedMatch
,这是一个特例。对于GKTurnBasedMatch
,邀请被视为转弯事件,并由函数中已注册的GKLocalPlayerListener
收到:
player(_ player: GKPlayer, receivedTurnEventFor match: GKTurnBasedMatch, didBecomeActive: Bool)
我正在尝试运行GKTurnBasedMatch
,我花了几天时间才找到这些信息,所以我希望通过在此处发布此信息来帮助其他人。