【问题标题】:best practices for archiving/unarchiving NSTableViewController data?归档/取消归档 NSTableViewController 数据的最佳实践?
【发布时间】:2012-08-06 22:19:08
【问题描述】:

我有一个拥有 nib 文件的 NSWindowViewController。 nib 文件中的对象之一是 NSTableView,由 NSTableViewController(也是 nib 的一部分)管理。

我想实现 NSCoding 协议来保存所有模型数据,其中一些包含在 NSTableViewController(我将简称为 TVC)中。归档整个 TVC 似乎是错误的答案,因为当它稍后取消归档时,它不会连接到笔尖。虽然我可能可以通过编程方式重新连接所有内容……但这看起来很笨拙。

我可以让 NSWindowViewController 从 TVC 中获取表数据,但这意味着我必须公开所有 ivars,这似乎也是错误的解决方案。

归档/取消归档存储在 TVC 中的数据的最佳方式是什么?

【问题讨论】:

    标签: objective-c cocoa cocoa-design-patterns


    【解决方案1】:

    表视图控制器应该具有对存储数据的模型的引用,或者如果您的应用程序很简单,您可能会将模型数据存储在表视图控制器的数组或字典中。应该归档的是数组或字典,而不是表视图控制器。

    【讨论】:

    • 我同意数组(由表视图控制器存储)是需要存档的。但是 TVC 不能自己存档,因为存档方法会存储 TVC 本身。如果 TVC 不能/不应该实现 initWithCoder:,那么它也不应该实现 encodeWithCoder:。所以这让我不得不将数组 ivar 提升为 @property,以便其他人可以查看内部并将其存档。我只是想知道是否还有另一种我错过的方法不涉及将 ivar 转换为属性。
    • 我添加了一些方法来将私有数据打包和解包到字典中。然后调用方法将其传递给归档器/从归档器传递。
    猜你喜欢
    • 2021-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-24
    • 1970-01-01
    • 2010-11-19
    • 1970-01-01
    相关资源
    最近更新 更多