2013-07-26 22 views
0

我是Mac上的Objective-C編程新手。我有一個Mac應用程序,我創建了一個類'Product',其中包含'ID','Name','Price'等變量。當我的應用程序中創建一個新的'Product'時,我需要能夠保存它。我已經看過各種儲蓄方法,但我不確定要使用哪種方法。任何建議將不勝感激。保存在Objective-C中

+0

需要多長時間才能保存它?會有多少產品? Synching?雲存儲? 「可搜索」? – Wain

+0

對不起,我不清楚。我只是在本地保存它們,即沒有云存儲。該應用程序只是一個個人應用程序。產品數量將達到約750個。我會要求將它們永久存儲,並具有編輯它們的能力。 –

回答

0

要保存/讀取你的對象在一個文件中,你必須做一些所謂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 |        | 
-------------------------------------------------------| 

當DE /序列化,你只需要讀/根據您所創建的規範書寫的對象。此方法創建最緊湊的文件。

0

我會使用核心數據。我將從基本的Xcode主細節模板開始,它將爲您創建模型和示例實體,並提供列出所有項目和添加新項目的視圖以及詳細視圖,您可以在其中查看令人震驚的細節。

0

從產品中製作NSDictionary是否容易?

該字典中的所有值都是NSString,NSData,NSArray或NSDictionary的子類嗎?

如果是這樣,您可以創建一個NSArray,而不是爲每個產品包含一個這樣的NSDictionary。

方法writeToFile:atomically:將允許您從此NSArray保存文件。 方法initWithContentsOfFile:將允許您閱讀bak該文件並從中創建一個NSArray。然後,您將能夠獲取每個NSDictionary並從中重新創建一個產品。

如果你不能使你的數據適合該方案,你將不得不使用更精細的序列化方法。