我在这里看到了关于保存NSArrays / NSDictionaries的各种问题,但是当一些子元素是UIImages时,我有点担心该怎么办。
为了给出一点上下文,该应用程序本质上是一个博客类型的应用程序。当用户撰写新条目时,他们的帖子可以包含以下内容:
从本质上讲,如果用户决定暂时取消他们的博文,我正在尝试为应用实施“保存草稿”功能。当用户取消博客帖子时,他们将在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?
谢谢!
答案 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];