4

我的问题是当我使用相机 UIImagePicker 并且手机内存不足时。它会引发内存警告并卸载视图,然后重新加载。

我知道这是一个非常普遍的问题,而且很多问题已经在 SO 中了。我不会进入这个。

- (void)viewDidLoad
{
    [super viewDidLoad];

    MyPersonClass *persons = [[MyPersonClass alloc] init];   
    persons.images = [NSMutableDictionary dictionaryWithCapacity:4];
....
...
}    

我的问题是我的视图控制器有四个按钮和 UIImageViews,当我点击每个按钮时,它们会打开相机,点击的图像会显示在 UIImageViews 中,这些图像也存储在persons.imagesNSMutable 字典中。

在此处输入图像描述

有时它会引发内存警告的流行错误并卸载视图,这会删除 UIImageView 中在内存警告之前拍摄的所有图像,并且我丢失了所有内容,persons.iamges我只想能够检索这些数据。我不知道在哪里存储它(我不想为此使用 CoreData)。

4

3 回答 3

1

您可以在调用viewDidUnload时维护用于存储图像的实例变量。在viewDidUnload中设置一个标志,然后存储您的 Imageviews 的所有图像。并在viewDidLoad检查标志,如果viewDidUnload被调用,则将保存的图像分配给您的 ImageView。

于 2012-05-22T08:15:42.563 回答
0

您可以像这样将 MutableDictionary 保存为沙盒应用程序中的 plist

[yourMutableDictionary writeToFile:pathToSave atomically:YES];

然后,通过这种方式获取你的 NSMutableDictionary

NSMutableDictionary *containOfPlist = [NSMutableDictionary arrayWithContentsOfFile:pathToYourPlist];

希望这是你想要的。

于 2012-05-22T08:18:37.943 回答
0

请使用 NSCache 来存储带有 KeyValue 对的图像。在内存警告上,将 NSCache 对象写入文件,并在内存不足警告回调时清除 NScache 对象中的所有对象。在再次加载应用程序时,从该文件中读取 NSCAche。

所以我以这种方式可以保存数据并可以使用它。

另一种选择是采用 NSDictnaory 并通过使用 NSArchiver 类存储它。

于 2012-05-22T08:21:27.050 回答