【问题标题】:Persistent Storage Cocoa/MacOSX持久存储 Cocoa/MacOSX
【发布时间】:2010-11-12 01:57:11
【问题描述】:

在使用 Cocoa/Objective-C 为 MacOSX 编写应用程序时,我希望能够存储用户输入的数据。目前每个安装只有一个用户;但是,如果每次安装有多个用户,我想了解存储方法如何变化。

在每次安装 1 个用户的情况下,我应该坚持使用 SQLLite 进行持久存储,还是有什么建议?

如果我允许每个安装有多个用户,我会首选哪种持久存储方法?

【问题讨论】:

    标签: objective-c cocoa macos desktop-application


    【解决方案1】:

    您可以使用 Core Data 并为每个用户创建一个持久存储(在 ~/Library/Application Data/My App/ 中)

    【讨论】:

    • 我几乎总是会使用 Core Data 开发一个新的应用程序,除非我能找到一个很好的理由不这样做。我想到了存储在云中的数据,但即便如此,我认为我可能会使用 Core Data 作为本地缓存。此外,Core Data 速度很快。
    • 如果您在不同用户之间共享数据,这可能会使事情变得复杂。但总有基于文档的核心数据......
    • 好的。我该怎么做?
    【解决方案2】:

    您还可以考虑使用 NSDictionary 作为您的内部存储机制,然后使用 [NSDictionary writeToFile:atomically:] 将它们写入属性列表文件。我的一个朋友喜欢把字典称为上帝的数据结构(舌尖上)。

    如果您的数据大小适中,这样做有几个优点:人类可读、人类可写、可更改。

    【讨论】:

    • 使用 NSDictionaries 作为模型对象会在你去实现 AppleScript 支持时带来痛苦。最好让每个对象都能够生成一个代表自己的字典,并从这样生成的字典中重新初始化自己。
    【解决方案3】:

    你想保存什么样的数据?当然,您仍然可以使用 sqlite 为多个用户存储数据(例如 Firefox 就是这样做的)。

    但是根据您的数据,您可能希望将其保存到普通文件/文档中?看看NSCoding 协议和抽象NSCoder 类。或者查看文档架构(NSDocumentControllerNSDocumentNSWindowController)。

    【讨论】:

      【解决方案4】:

      目前每个安装只有一个用户;但是,如果每次安装有多个用户,我想了解存储方法如何变化。

      只要你默认只将数据保存在用户的主目录中,格式就无关紧要了。

      您的选项包括属性列表、Core Data(更多的是一种架构决策——您的应用基于 Core Data 或不使用它)、SQLite、NSKeyedArchiver 和您自己的自定义格式。

      【讨论】:

        【解决方案5】:

        我会开始将数据存储到云端而不是本地存储。现在 ipad 出来了,如果你的 app 也用在 iphone 和 ipad 上怎么办。如果将数据存储在云端,则 iphone app 和 ipad 都可以使用相同的数据。如果你在本地存储,显然iphone app和ipad app不能使用相同的数据。

        【讨论】:

        • Mac OS X 应用程序无论如何都无法在 iPhone/iPod Touch/iPad 上运行。可可应用程序!= iPhone 应用程序。 ;)
        • mipadi:考虑到提问者有朝一日可能会启动 iPhone 和/或 iPad 版本的应用程序,Joo Park 可能会建议这样做。不过,我不建议将数据完全存储在云中。云有一种蒸发的方式。使用 Mac 版本作为同步中心(至少作为 The Cloud 的可选替代品)会更好。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-25
        • 2018-07-04
        • 2020-06-02
        • 2012-02-02
        • 2021-11-11
        • 2017-01-12
        相关资源
        最近更新 更多