保存在 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 的缺点?