保存包含NSDictionary的NSArray,该NSDictionation包含UIImages(和其他)的NSAr



我在这里看到了与保存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中?

谢谢!!

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

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

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

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

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

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

最简单的方法是将图像保存到应用程序文档文件夹中,并保存文件名和其他数据的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];

最新更新