我正在尝试使用NSKeyedArchiver
和NSKeyedUnarchiver
保存我的对象。我的对象引用了其他对象,并且在尝试取消归档时遇到了问题。
保存所有对象后,我尝试使用
在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查看最新的工作版本(未保存已启用)。