Swift,NSCoding - 未初始化的不可变数组对象错误 - 自定义对象

时间:2018-02-12 11:56:20

标签: swift nscoding

我正在尝试使用NSKeyedArchiverNSKeyedUnarchiver保存我的对象。我的对象引用了其他对象,并且在尝试取消归档时遇到了问题。

Objects graph with references

保存所有对象后,我尝试使用

在GameStore上取消归档
init() {
        if let archivedPlayers = NSKeyedUnarchiver.unarchiveObject(withFile: playersArchiveURL.path) as? [Player] {
            allPlayers = archivedPlayers
        }
    }

我收到错误method sent to an uninitialized immutable array object

我发现当我在Player类中删除required init?(coder aDecoder: NSCoder)的一部分时,我不会再收到错误了。

以下是导致问题被注释掉的部分的功能。

    required init?(coder aDecoder: NSCoder) {
        name = aDecoder.decodeObject(forKey: "name") as! String
        lastTimePlayed = aDecoder.decodeObject(forKey: "lastTimePlayed") as? Date
        timesPlayed = aDecoder.decodeInteger(forKey: "timesPlayed")
        playerID = aDecoder.decodeObject(forKey: "playerID") as! String

//        gamesPlayed = aDecoder.decodeObject(forKey: "gamesPlayed") as! [Game]
//        matchesPlayed = aDecoder.decodeObject(forKey: "matchesPlayed") as! [Game : [Match]]
//        gamesPlace = aDecoder.decodeObject(forKey: "gamesPlace") as! [Game : [Int]]
//        gamesPoints = aDecoder.decodeObject(forKey: "gamesPoints") as! [Game : [Int]]
        super.init()
    }

为什么会出现此错误?我正在考虑使用gameID和matchID来避免这种情况,但我想知道是否有更好的方法来处理这个问题。

您可以在我的github https://github.com/Przeszaf/BoardGamesTracker查看最新的工作版本(未保存已启用)。

0 个答案:

没有答案