在saveCurrrentTurn之后,GKTurnBasedMatch currentParticipant变为零

时间:2016-11-25 19:45:19

标签: gkturnbasedmatch

我有一个方法可以在创建新匹配时调用它(它设置游戏数据),并且它运行良好,除了有时(随机)当前参与者在我尝试保存数据后变为零。

我已经放置了几个断点,直到我尝试保存初始游戏数据,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)
        }

    })


}

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

尝试重新加载保存程序完成处理程序顶部的匹配对象。我知道这听起来很蹩脚。由于它是随机发生的,我怀疑(又一个)GKTurnBasedMatch错误。

但是,我在Apple的文档中提到过有关匹配对象变得陈旧(和/或接收不可靠的匹配对象)查询所有匹配列表的信息,直到您实际为每个匹配对象loadMatchWithID找到匹配),所以我最终变得非常自由,因为我使用loadMatchWithID作为使用GKTurnBasedMatch的必要成本。