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