0

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

4

4 回答 4

0

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

于 2013-07-26T13:27:23.227 回答
0

要在文件中保存/读取您的对象,您必须执行一些称为序列化和反序列化您的对象的操作。为此,您必须决定是要使用现有文件格式(推荐)还是创建自己的文件格式。

使用现有格式 - 一个好的做法是使用现有格式(如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>

以后任何其他应用程序都可以轻松读取此结构。要在这样的结构中获取对象的内容,您可以使用像 wonderxml 这样的序列化库,或者编写自己的序列化方法来序列化和反序列化您的对象。最后,您将使用这些方法中的任何一种创建的 XML 写入文件,例如使用 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 |                               |
-------------------------------------------------------|

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

于 2013-07-26T13:22:30.413 回答
0

用 Product 制作 NSDictionary 容易吗?

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

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

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

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

于 2013-07-26T13:51:07.317 回答