2013-09-19 4 views
3

[GKMatchmaker sharedMatchmaker] .inviteHandler устарел в iOS 7, но руководство GameKit все еще говорит, чтобы настроить его таким образом. Кто-нибудь знает, что мы должны использовать для игры в режиме реального времени iOS 7? Существуют новые классы/методы для нескольких классов слушателей, но никто не обращается к этому конкретно, что я видел.GameKit GKMatchMaker приглашаетHandler устарел в iOS7, что такое замена?

'inviteHandler' is deprecated: first deprecated in iOS 7.0 

ответ

1

Похоже, что предполагаемая замена - это протокол GKInviteEventListener. Вы можете увидеть ссылку на нее в GKLocalPlayer.h; протокол GKLocalPlayerListener расширяет его.

Однако в этом протоколе имеется ограниченная документация (вы можете найти его в окне документации Xcode 5, но я не вижу его в Интернете).

Учитывая отсутствие документации, вероятно, безопаснее продолжать использовать устаревший метод. Вам все равно нужно продолжать использовать его для iOS6.

+0

Я понял, как много. Я буду придерживаться устаревания в ожидании дальнейшей документации. Благодаря! –

4

Таким образом, я начал очень расстраиваться этим (почти волшебным образом, предупреждения об устаревании начали появляться на моей консоли вчера). Apple, похоже, не говорит о том, как объект может быть установлен как вещь, которая реализует новый протокол GKLocalPlayerListener.

Вот как я это сделал. Только после аутентификации моего локального игрока я зарегистрировал объект, который реализует протокол GKLocalPlayerListener (в данном случае self) в качестве Listener. Я тестировал, как мое приложение отвечает на те же события 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 (или что-то подобное, что немного больше, сделанный на заказ), когда это вызвано. Я знаю, что это то, что я делал в предыдущих версиях моего приложения, поэтому он не может быть так далеко. Структура метода также весьма схожа.

Другие испытания подтвердят, что это действительно правильный способ приближения к новому протоколу, но пока это кажется правильным. Я продолжу это до тех пор, пока не будет указано иначе.

+0

Хм .. Я понимаю идею регистрации слушателя и реализации вышеприведенных методов, но ничто, кажется, не вызывается, как обрабатывать принятые приглашения. Я просмотрел документацию слушателя и не вижу ничего, что заменяет обработку «acceptInvite». –

+0

@ Андрю Робинсон: Я в том же положении ... как вы справляетесь с событием, когда игрок получает приглашение? И будет ли метод inviteHandler работать в приложении iOS 7 или же означает, что вы не можете использовать его вообще в приложении iOS 7? Заранее спасибо. – Coolsinus

+0

@Coolsinus У меня все еще нет ответа для слушателя в отношении приема приглашений. Тем не менее, да, устаревшее приглашениеHandler все еще работает в iOS 7. App Store одобрен на прошлой неделе с обработчиком, который все еще реализован. Я буду следить за лучшей документацией относительно слушателя и публикации, если я это выясню. –

0

Если вы используете GKTurnBasedMatch, это особый случай. Для GKTurnBasedMatch, инвайты считаются поворота событий, и мь зарегистрированном GKLocalPlayerListener в функции:

player(_ player: GKPlayer, receivedTurnEventFor match: GKTurnBasedMatch, didBecomeActive: Bool) 

Я пытаюсь запустить GKTurnBasedMatch и мне потребовалось дней, чтобы найти эту информацию, так что я надеюсь, что я Я помог кому-то другому, разместив это здесь.

Смежные вопросы