问题
I am trying to implement a turn-based app, and there is no problem with sending turn data, but I see no way of receiving data automatically. So far, I have found out that much:
There is a
GKTurnBasedEventHandlerDelegate
-protocol. It is easy to implement, but where do I set that object to be a delegate of whatever it has to be a delegate of? It does not seem to be a delegate ofGKTurnBasedMatch
, orGKTurnBasedMatchmakerViewController
, orGKMatchMaker
.There is also a method of
GKTurnBasedMatch
which is calledloadMatchDataWithCompletionhandler
, but, as far as I understand, it is only called once when you kinda have a gut feeling that the match needs to be updated. How am I to know that it has to be updated? Do I have to fire this function every second or so?
Thanks in advance.
UPDATE: I have set [GKTurnBasedEventHandler sharedTurnBasedEventHandler].delegate
to be a static instance that implements GKTurnBasedEventHandlerDelegate
. It still never gets called.
回答1:
You set it with below statement, it becomes the delegate of a shared instance:
[[GKTurnBasedEventHandler sharedTurnBasedEventHandler] setDelegate:self];
You do not need to call loadMatchDataWithCompletionhandler
manually actually, when one of the participants call endTurnWithMatchData
all other participants will be notified through GKTurnBasedEventHandler
delegate method:
-(void) handleTurnEventForMatch:(GKTurnBasedMatch *)match didBecomeActive:(BOOL)didBecomeActive
That's where you need to update UI. Beware that simulator does not support GKTurnBasedEventHandler
delegate methods, they only get called in actual devices.
来源:https://stackoverflow.com/questions/15957576/gkturnbasedmatch-receive-data