【问题标题】:NSArrayController + NSTableView : automatically save changes without Core DataNSArrayController + NSTableView : 自动保存更改,无需 Core Data
【发布时间】:2012-04-12 07:17:32
【问题描述】:
好的,所以我正在实现一个经典场景:
- 一个
NSPopupButton,里面有一些物品
- 当所选值更改时,我的
itemsArray已更新
-
itemsArray 链接到NSArrayController
-
itemsArray 中的每个项目都是一个NSMutableDictionary(带有键:title,content)
-
NSTableView 显示arrangedObjects 的titles(绑定)
-
NSTextView 显示所选项目的content。
现在,我想要的是自动保存对 itemsArray(或 itemsArray 的项目标题/内容)的任何更改,但不使用 Core Data(我怀疑这可能是最好的方法)。
我想这是一个非常基本的问题,但老实说,我从来没有真正喜欢过 Cocoa 的自动魔法做事方式......所以,我需要你的帮助......
我应该怎么做?
【问题讨论】:
标签:
objective-c
cocoa
nstableview
nsarraycontroller
autosave
【解决方案1】:
您可以非常轻松地将数组写入文件:
[yourArray writeToURL:someFileURL atomically:YES];
如果数组的所有内容都是属性列表对象(即它们是 NSNumber、NSString、NSDictionary、NSArray 或 NSData 对象),这将起作用。您的示例就是这种情况。
然后,您可以在从磁盘加载时使用arrayWithContentsOfURL: 或initWithContentsOfURL: 方法重新创建阵列。
如果您的模型对象不仅仅是一个数组,那么您应该使您的模型对象符合NSCoding 协议。这意味着您需要实现initWithCoder: 和encodeWithCoder: 方法。然后,您可以使用 NSKeyedArchiver 和 NSKeyedUnarchiver 类将您的对象与您可以写入磁盘的 NSData 表示进行转换。
您应该阅读Archives and Serialization Programming Guide 了解更多详细信息。
【解决方案2】:
另一种解决方案可能是添加 Shared User Defaults Controller 并将 Controller Content Array 从 Array Controller 绑定到 Shared User Defaults Controller