保存在 Objective-C 中

Posted

技术标签:

【中文标题】保存在 Objective-C 中【英文标题】:Saving in Objective-C 【发布时间】:2013-07-26 12:50:28 【问题描述】:

我是在 Mac 上进行 Objective-C 编程的新手。我有一个 Mac 应用程序,我创建了一个“产品”类,其中包含“ID”、“名称”、“价格”等变量。在我的应用程序中创建新的“产品”时,我需要能够保存它。我已经查看了各种保存方法,但我不确定使用哪种方法。任何建议将不胜感激。

【问题讨论】:

您需要保存多长时间?会有多少产品?同步?云存储? “可搜索性”? 对不起,我不清楚。我只会将它们保存在本地,即没有云存储。该应用程序只是一个个人应用程序。产品数量将达到约 750 种。我会要求它们永久存储,并且能够编辑它们。 【参考方案1】:

您需要查看以下链接:

http://en.wikibooks.org/wiki/Programming_Mac_OS_X_with_Cocoa_for_Beginners/Objective_C,_the_language_and_its_advantages

http://www.razorsql.com/articles/sqlite_mac.html

http://www.techotopia.com/index.php/ios_6_iPhone_Database_Implementation_using_SQLite

【讨论】:

【参考方案2】:

要将对象保存/读取到文件中,您必须执行名为serializing and deserializing your object 的操作。为此,您必须决定是使用现有文件格式(推荐)还是创建自己的文件格式。

使用现有格式 - 一个好的做法是使用像XML 这样的现有格式,这样可以更容易地在以后从不同的应用程序中读取数据。您的 XML 的内容可能如下所示:

<products>
    <product>
        <id>24</id>
        <name>Playstation 3</name>
        <price>200</price>
    </product>
    <product>
        <id>52</id>
        <name>Xbox 360</name>
        <price>150</price>
    </product>
    <product>
        <id>64</id>
        <name>Pooh, the bear</name>
        <price>10</price>
    </product>
</products>

以后任何其他应用程序都可以轻松读取此结构。要在这样的结构中获取对象的内容,您可以使用serialization library like wonderxml,或者编写自己的序列化方法来序列化和反序列化您的对象。最后,您将使用任何这些方法创建的 XML 写入文件,例如 with the NSFileManager。

创建自己的文本或二进制格式需要定义自己的文件格式,因此需要编写自己的序列化和反序列化方法。

文本格式以文本方式写入文件,就像您定义它的方式一样。例如,用“,”分隔每个属性,用“;”分隔每个产品条目。在这里,您必须注意编码和转义用作分隔符的字符。内容可能如下所示(注意反斜杠作为转义字符):

24,Playstation 3,200;52,Xbox 360,150;64,Pooh\, the bear,10

创建自己的二进制格式需要更多关于二进制文件的知识。您必须定义内容的顺序并注意编码。例如,您的格式可能如下所示:

-------------------------------------------------------|
| attribute  | length  | notice                        | 
|------------|---------|-------------------------------|
| id         | 4 bytes | number, note [endianess][5]   |
| nameLength | 4 bytes | length of the following name  |
| name       | ? bytes | take length from previous     | 
| price      | 4 bytes |                               |
-------------------------------------------------------|

在反序列化时,您只需根据您创建的规范读取/写入对象。此方法创建最紧凑的文件。

【讨论】:

【参考方案3】:

我会使用核心数据。我将从基本的 Xcode 主细节模板开始,它将为您创建模型和示例实体,以及用于列出所有项目并添加新项目的视图和一个细节视图,您可以在其中看到令人震惊的细节.

【讨论】:

【参考方案4】:

用产品制作一个 NSDictionary 容易吗?

该字典中的所有值是否都是 NSString、NSData、NSArray 或 NSDictionary 的子类?

如果是这样,您可以创建一个 NSArray,而不是为您的每个产品包含一个这样的 NSDictionary。

writeToFile:atomically: 方法可以让你从这个 NSArray 中保存一个文件。 initWithContentsOfFile: 方法将允许您读取该文件并从中创建一个 NSArray。然后,您将能够取出每个 NSDictionary 并从中重新创建一个产品。

如果您不能使您的数据适合该方案,您将不得不使用更精细的序列化方法。

【讨论】:

以上是关于保存在 Objective-C 中的主要内容,如果未能解决你的问题,请参考以下文章

在 Objective-C 代码中使用 Swift 的缺点?

获取根 ViewController - Objective-C

Swift对比Objective-C

保存在 Objective-C 中

如何在 Objective-C 中保存图像列表

iOS/Objective-C:在后台线程中保存到核心数据