2012-03-30 57 views
0

我已經在這裏看到有關保存NSArrays/NSDictionaries的各種問題,但我有點困惑,當一些子元素是UIImages。保存一個包含NSDictionary的NSArray,其中包含NSArray的UIImages(和其他人)

爲了給出一點上下文,該應用程序基本上是一個博客類型的應用程序。當用戶正在譜寫新的項目,他們的崗位可以包含以下內容:從自己的相簿

  • 3張照片
  • 文本
  • 位置

從本質上說,我是如果用戶決定暫時取消他們的博客帖子,則試圖爲​​應用實施「保存草稿」功能。當用戶取消博客文章時,他們會在UIActionSheet中詢問他們是否想保存他們的草稿。當用戶想再次發帖時,他們可以從保存的草稿停止的地方開始。

在這一點上,我需要保存這些下列對象:

1) NSArray of selected photos 
---> contains NSDictionaries (up to 3) 
--------> UIImage (large sized version) 
--------> UIImage (thumbnail sized version) 

2) NSDictionary of NSValues (just some view x,y position data) 

3) Text -- NSString data of the blog text they have written 

4) Location text -- NString data of their current location 

考慮到我需要將上述1〜4的數據保存,以使「保存草稿」 functinality,什麼是最好的方法來做到這一點?我應該做一個特殊的課程來保存所有這些數據嗎?另外,在我將它們保存到磁盤之前,我是否需要首先將UIImage製作成NSData?

謝謝!

回答

1

是的類/結構模型更有意義,更易於處理。 東西喜歡 -

Interface Blogdata 
    NSArray *selectedPhoto; 
    NSDictionary *positionValues; 
    NSString *blogText; 
    NSString *locationText; 

,然後你可以爲照片數據多了一個模型;

Interface Photodata 
    NSDictionary *photo; 
    UIImage *largeImage; 
    UIImage *thumbImage; 
+0

謝謝,我想我仍然對UIImage處理感到困惑。假設我使用UIImage對象爲Photodata創建了一個模型。 UIImage對象會按原樣序列化,還是必須先將它們轉換爲NSData,然後序列化Photodata? – kurisukun 2012-03-30 07:13:33

+0

如果你有NSData,那麼你可以用這種方式 - 1。存儲在NSData而不是UIImage,當你需要該圖像然後轉換(雖然有點消耗內存)2.直接存儲在uiimage中(在從nsdata轉換爲uiimage後) – rishi 2012-03-30 07:14:47

1

您提到的所有屬性都看起來像屬於Blog類。他們已經分組在一起了嗎? A Blog對象可以捕獲草稿的狀態,其中變量(屬性)是您提及的四件事情。然後,您可以將Blog對象保存爲NSData,並在用戶再次需要草稿時讀取它。

這樣做的好處是您只需要擔心保存一個對象,而不必考慮每次保存四次(並檢索它們)。

+0

此時尚未上課,但確實有意義。但是,即使我創建一個Blog類,我是否也必須將UIImage轉換爲NSData?或者Blog類可以保存UIImages,只需將Blog類本身保存爲NSData? – kurisukun 2012-03-30 07:07:37

1

最簡單的方法是將圖像保存到文件的應用程序文件夾,保存的文件名,並且可以表示爲在drafts.plist文本等數據的NSArray。

filenameStr = [NSString stringWithFormat:@"image1.png"]; 
fileManager = [NSFileManager defaultManager]; 
paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
documentsDirectory = [paths objectAtIndex:0]; 
imagePath = [documentsDirectory stringByAppendingString:@"/"]; 
imagePath = [imagePath stringByAppendingString:filenameStr]; 
NSData *imageData = UIImagePNGRepresentation(myImage); 
[imageData writeToFile:imagePath atomically:YES];