2015-05-15 28 views
0

我想製作基於多人遊戲的益智類遊戲。它的所有功能都可以正常工作,並獲得任何玩家轉向通知。但在iOS 8.3中,我無法獲得委託方法calld而玩家轉向結束。任何解決方案?基於Turn的多人遊戲中心中的Bug在iOS 8.3中

我也註冊Listener.But它不是called.Here是代碼..

- (void)authenticateLocalUser { 

    if (!gameCenterAvailable) return; 

    NSLog(@"Authenticating local user..."); 
    if ([GKLocalPlayer localPlayer].authenticated == NO) { 

     __weak typeof(self) weakSelf = self; 
     __weak GKLocalPlayer *weakPlayer = [GKLocalPlayer localPlayer]; 

     weakPlayer.authenticateHandler = ^(UIViewController *viewController, NSError *error) { 
      if (viewController != nil) { 
       [weakSelf showAuthenticationDialogWhenReasonable:viewController]; 
      } else if (weakPlayer.isAuthenticated) { 
       // Player has been authenticated! 
       [weakPlayer unregisterAllListeners]; 

       [weakPlayer registerListener:weakSelf]; 

     //  GKTurnBasedEventHandler *ev = 
     //  [GKTurnBasedEventHandler sharedTurnBasedEventHandler]; 
     //  ev.delegate = self; 

      } else { 
       // Should disable Game Center? 
      } 
     };  
    } 
} 
+3

我們不是魔術師。請提供來源:-) – Schemetrical

+0

請告訴我們你做了什麼,我們可以開始思考什麼是錯的。永遠不會工作不同http://mattgemmell.com/what-have-you-tried/ –

+0

代碼被添加。 – hmdeep

回答

0

既然你提到結束一轉,也許你正在經歷的是在IOS8.3,經過爆發通知出臺的bug活躍玩家召喚endTurnWithNextParticipants,因爲這裏討論:endTurnWithNextParticipants doesn't trigger receivedTurnEventForMatch after update to iOS 8.3 and swift 1.2

一對夫婦身邊,提出有工作的,但我發現的唯一解決方案,工程可靠是建立在非有源器件的定時器循環並繼續重新加載比賽數據直到你選擇你自己成爲當前的參與者。這是我用的:

-(void)isMatchActive:(NSTimer *)timer 
{ 
    NSString *matchID = (NSString *)timer.userInfo; 

    [GKTurnBasedMatch loadMatchWithID:matchID withCompletionHandler:^(GKTurnBasedMatch *match, NSError *error) 
    { 
     GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer]; 
     GKTurnBasedParticipant *currentParticipant = match.currentParticipant; 

     if ([localPlayer.playerID isEqualToString:currentParticipant.player.playerID]) 
     { 
      //we have become active. Call the event handler like it's supposed to be called 
      [self player:localPlayer receivedTurnEventForMatch:match didBecomeActive:false]; 
     } 
     else 
     { 
      //we are still waiting to become active. Check back soon 
      float dTime = 5.0; 
      gameController.IOS8BugTimer = [NSTimer scheduledTimerWithTimeInterval:dTime 
                      target:self 
                    selector:@selector(isMatchActive:) 
                    userInfo:matchID 
                     repeats:NO]; 
     } 
    }]; 
} 
+0

更新:我描述的問題似乎是從IOS8.4開始修復的。 – Thunk