可以参考其他模型的模型 - 使用NSCoding进行保存

时间:2018-02-10 11:15:53

标签: swift models nscoding

我正在创建某种游戏跟踪器,并想问这种设计是不是错误的选择。

我使用的是MVC架构,在我的模型中,我对其他模型有所反思,即我在玩家模型中有

var name: String
var lastTimePlayed: Date?
var timesPlayed: Int
let playerID: String
var gamesPlayed = [Game]()
var matchesPlayed = [Game: [Match]]()
var gamesPlace = [Game: [Int]]()
var gamesPoints = [Game: [Int]]()

以下是它的样子和图像:

Graph of all models used

箭头表示模型保持对另一个模型的引用。

仅保存gameID和matchID或gameName而不是游戏和匹配模型的参考会更好吗?我更容易保持直接的反馈,所以我可以访问最后一场比赛的日期等,但我也可以这样做。

当然,当我删除模型时,我会处理所有这些反馈并将其删除,因此没有内存泄漏。

我的第二个问题是 - 当我尝试使用NSCoding保存那些(在商店使用NSKeyedArchiver.archiveRootObject时)我会遇到问题吗?它不会像玩家一样从一个玩家到另一个游戏再到玩家再到玩家之类的循环周期?

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

NSCoder子类知道如何避免循环引用,请参阅https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/Archiving/Articles/archives.html

尽管如此,您应该考虑将weak引用引入数据模型以避免保留周期。