【问题标题】: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 显示arrangedObjectstitles(绑定)
  • NSTextView 显示所选项目的content

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

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

我应该怎么做?

【问题讨论】:

    标签: objective-c cocoa nstableview nsarraycontroller autosave


    【解决方案1】:

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

    [yourArray writeToURL:someFileURL atomically:YES];
    

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

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

    如果您的模型对象不仅仅是一个数组,那么您应该使您的模型对象符合NSCoding 协议。这意味着您需要实现initWithCoder:encodeWithCoder: 方法。然后,您可以使用 NSKeyedArchiverNSKeyedUnarchiver 类将您的对象与您可以写入磁盘的 NSData 表示进行转换。

    您应该阅读Archives and Serialization Programming Guide 了解更多详细信息。

    【讨论】:

      【解决方案2】:

      另一种解决方案可能是添加 Shared User Defaults Controller 并将 Controller Content ArrayArray Controller 绑定到 Shared User Defaults Controller

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多