保存包含NSDictionary的NSArray,该NSDictionary包含UIImages的NSArray(以及其他)

时间:2012-03-30 06:54:54

标签: iphone uiimage save nscoding

我在这里看到了关于保存NSArrays / NSDictionaries的各种问题,但是当一些子元素是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个数据才能使“保存草稿”功能,这样做的最佳方法是什么?我应该制作一个特殊课程来保存所有这些数据吗?另外,在将它们保存到磁盘之前,我是否首先需要将UIImages转换为NSData?

谢谢!

3 个答案:

答案 0 :(得分:1)

您提到的所有属性似乎都属于Blog类。它们已经组合在一起吗? Blog对象可以捕获草图的状态,对象的变量(属性)是您提到的四件事。然后,您可以将Blog对象保存为NSData,并在用户再次想要草稿时读取它。

这样做的好处是你只需要担心保存一个对象,而不必考虑每次保存四个(并检索它们)。

答案 1 :(得分:1)

是的,类似结构的类/模型也更有意义,也更容易处理。 像 -

这样的东西
Interface Blogdata 
     NSArray *selectedPhoto;
     NSDictionary *positionValues;
     NSString *blogText;
     NSString *locationText;

然后你可以再制作一个照片数据模型;

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

答案 2 :(得分:1)

最简单的方法是将图像保存到apps文档文件夹,并保存NSArray文件名和其他可以在drafts.plist中表示为文本的数据。

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];