4

私の問題は、カメラの UIImagePicker を使用していて、電話のメモリが不足しているときです。メモリ警告をスローし、ビューをアンロードしてからリロードします。

これは非常に一般的な問題であり、多くの質問がすでに SO にあることを私は知っています。私はこれには立ち入りません。

- (void)viewDidLoad
{
    [super viewDidLoad];

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

私の問題は、View Controller に 4 つのボタンと UIImageViews があり、それぞれをタップするとカメラが開き、クリックされた画像が UIImageViews に表示され、これらの画像がpersons.imagesNSMutable Dictionary にも保存されることです。

ここに画像の説明を入力

時々、メモリ警告の一般的なエラーがスローされ、ビューがアンロードされます。これにより、メモリ警告の前に撮影された UIImageView 内のすべての画像が削除され、persons.iamgesこのデータを取得できるようにしたいだけですべてが失われます。どこに保存すればよいかわかりません (これには CoreData を使用したくありません)。

4

3 に答える 3

1

viewDidUnloadが呼び出されたときに、画像を保存するためのインスタンス変数を維持できます。viewDidUnloadにフラグを設定してから、Imageviewsのすべての画像を保存します。また、viewDidLoadで、 viewDidUnloadが呼び出された場合に、保存された画像をImageViewに割り当てるフラグを確認します。

于 2012-05-22T08:15:42.563 に答える
0

KeyValue ペアで画像を保存するには、NSCache を使用してください。メモリ警告で NSCache オブジェクトをファイルに書き込み、メモリ不足警告コールバックで NScache オブジェクトからすべてのオブジェクトをクリアします。アプリケーションを再度ロードすると、そのファイルから NSCAche が読み込まれます。

そうすれば、データを保存して元に戻すことができます。

別の代替オプションは、NSDictnaory を取得し、NSArchiver クラスを使用して保存することです。

于 2012-05-22T08:21:27.050 に答える
0

そのようなサンドボックスのアプリケーションで MutableDictionary を plist として保存できます

[yourMutableDictionary writeToFile:pathToSave atomically:YES];

そして、この方法で NSMutableDictionary を取得します

NSMutableDictionary *containOfPlist = [NSMutableDictionary arrayWithContentsOfFile:pathToYourPlist];

これがあなたが望むものであることを願っています。

于 2012-05-22T08:18:37.943 に答える