2016-11-25 5 views
1

У меня есть метод, который вызывается всякий раз, когда создается новый матч (он устанавливает игровые данные), и он работает хорошо, за исключением иногда (случайным образом) текущего участника становится nil после того, как я попытаюсь сэкономить данные.GKTurnBasedMatch currentParticipant становится nil после saveCurrrentTurn

Я поместил несколько контрольных точек, и, пока я пытаюсь сохранить исходные данные игры, currentParticipant не ноль, но после сохранения, это иногда нильполугруппы:

func enterNewGame(_ match:GKTurnBasedMatch) { 
    self.match = match 
    var pArray = [Player]() 

    let mode: Game.Mode = .quick 

    self.game = Game(mode: mode, players: pArray) 

    if match.participants != nil { 
     for (index, player) in match.participants!.enumerated() { 

      //populate the pArray with Players, with corresponding initial data. 
     } 


    } 

    // More setup to the Game object here. 


//At this point, match.currentParticipant is not nil 

    let data = NSKeyedArchiver.archivedData(withRootObject: game!) 
    match.saveCurrentTurn(withMatch: data, completionHandler: {error in 
     if error != nil { 
      print(error!.localizedDescription) 
      return 
     } 

     if self.segueToPick != "" { 
//At this point, match.currentParticipant is sometimes nil 
      self.performSegue(withIdentifier: self.segueToPick, sender: self) 
     } 

    }) 


} 

Любые идеи?

ответ

0

Попробуйте перезагрузить объект соответствия в верхней части обработчика завершения хранителя. Я знаю, что это звучит глупо. И поскольку это случается случайным образом, я подозреваю (еще один) ошибку GKTurnBasedMatch.

Но я столкнулся с упоминанием где-то в документах Apple о том, что объекты совпадения становятся устаревшими (и/или получают ненадежные объекты соответствия от запроса списка всех совпадений до тех пор, пока вы не назовете loadMatchWithID для каждого найденного совпадения), поэтому я в конечном итоге стал очень либеральным с моим использованием loadMatchWithID в качестве необходимой стоимости использования GKTurnBasedMatch.

+0

Спасибо. Я сделаю чек, и если он будет равен нулю, я сделаю, как вы предлагаете. – coopersita

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