NSArrayController + NSTableView:在没有Core Data的情况下自动保存更改

时间:2012-04-12 07:17:33

标签: objective-c cocoa nstableview nsarraycontroller autosave

好的,所以我正在实施一个经典场景:

  • 其中包含一些项目的NSPopupButton
  • 当所选值发生变化时,我的itemsArray会更新
  • itemsArrayNSArrayController
  • 相关联
  • itemsArray中的每个项目均为NSMutableDictionary(包含密钥:titlecontent
  • NSTableView显示title(绑定)的arrangedObjects
  • NSTextView显示所选项目的content

现在,我想要的是自动保存对itemsArray(或itemsArray的项目标题/内容)的任何更改,但不使用Core Data(我怀疑这可能是最好的方法)。

我认为这是一个非常基本的问题,但老实说,我从来没有真正喜欢Cocoa的自动神奇做事方式......所以,我需要你的帮助......

我应该怎么做?

2 个答案:

答案 0 :(得分:1)

您可以非常轻松地将数组写入文件:

[yourArray writeToURL:someFileURL atomically:YES];

如果数组的所有内容都是属性列表对象(即NSNumberNSStringNSDictionaryNSArrayNSData,这将有效对象)。在您的示例中就是这种情况。

然后,当您从磁盘加载时,可以使用arrayWithContentsOfURL:initWithContentsOfURL:方法重新创建阵列。

如果模型对象比数组更复杂,那么您应该使模型对象符合NSCoding协议。这意味着您需要实施initWithCoder:encodeWithCoder:方法。然后,您可以使用NSKeyedArchiverNSKeyedUnarchiver类将对象转换为可以写入磁盘的NSData表示形式。

您应该阅读Archives and Serialization Programming Guide以获取更多详细信息。

答案 1 :(得分:0)

另一种解决方案可能是添加Shared User Defaults Controller并将控制器内容数组Array Controller绑定到Shared User Defaults Controller