2

あるビューで画像を閲覧し、別のビューで画像を作成できる iPhone アプリを作成しています。

画像を作成するビューは、次のコードを使用してドキュメント フォルダーに画像を書き込みます (ボタンをタップしてビューを閉じる場合)。

[UIImagePNGRepresentation(image) writeToFile:path atomically:YES];

ブラウザー ビューは、次を使用して画像を読み込みます。

UIImage *image = [UIImage imageWithContentsOfFile:path];

これで、10 回中 9 回は完全に機能します。10 分の 1 は、読み込む前に画像が完全に書き込まれていないため、下半分が黒くなります。最終的にはすべてが書き込まれます。ブラウザで画像をリロードすると、完全な画像が表示されます。これらのことは、単一のスレッド内で常に一貫していると思いました。

この動作を防ぐために何かできますか?

現在、新しく作成した画像をブラウザに戻すことを考えていますが、ブラウザには以前に作成した画像もすべて表示されるため、それはハックのように思えます。

4

2 に答える 2

2

画像が を使用してメイン (UI) スレッドに保存されていることが確実であり、writeToFile:atomically:その画像がメイン スレッドにも読み込まれている場合は、そのメソッドがコントラクトを維持して操作を完了することに問題があるようです。電話が戻ってくる時間。iOS にはバグが存在することがあります。

ただし、同様の問題が発生する可能性のある方法の1つは、あるビューを離れて別のビューを表示するときに呼び出される順序について仮定が行われた場合です。したがって、画像がこれらの方法のいずれかに保存されていないことも確認します。viewWillAppearviewDidDisappear

問題が半分表示されている画像を示していると言ったので、そうではないと思いますが、操作の順序で同様の問題を抱えている他の人への警告を含めます。

于 2012-06-21T10:42:13.450 に答える
1

UI に間に合わないプロセスの標準的な解決策は、プロセスを新しいスレッドに分割することです。別のスレッドを作成して画像を保存し、デリゲート メソッドを介して UI に通知して更新する必要があるかもしれません。

于 2012-06-21T08:46:48.207 に答える