3

UIImagePickerControllerSourceTypeCamera に奇妙な問題があります。私のアプリケーションでは、ギャラリーから写真を選択するか、カメラで写真を撮るかを選択できます。ギャラリーを選択した場合は、写真を選択してビューに戻りますが、問題はありません。

ただし、UIImagePickerControllerSourceTypeCamera を使用している場合、ビューに戻ると、ビューで何かおかしなことをしているように見えます。

たとえば、いくつかの要因に基づいて必要に応じてビュー内のオブジェクトを移動する viewDidLoad メソッドに一連のコードがあります。このコードは、UIImagePickerControllerSourceTypeCamera を終了すると呼び出されますが、ギャラリーを終了すると呼び出されません。

これは期待されていますか?

4

1 に答える 1

3

didReceiveMemoryWarningリソースを大量に消費するカメラによってトリガーされているものによって、ビューがダンプされていると思います。この理論をテストするために、カメラなしでシミュレーターにメモリ警告を強制的に生成させることができます。

一般的に言えば、viewDidLoad は複数回呼び出されることに対処できる必要があります。メソッドではありませんinitself.viewnil に設定され、後でビューを再作成する必要がある場合は、再度呼び出されます。問題を引き起こしているコードを配置するのに適切な場所があるかもしれませんがinit、指定されたイニシャライザーが nib の読み込みによってバイパスされるため、メソッドは扱いにくいものです。

nib からロードさinitWithCoderれると、代わりにクラスが呼び出され、init プロセス全体がバイパスされます。したがって、オブジェクトを再初期化すると、loadView の呼び出しなど、nib に既に含まれているものをプログラムで構築することになっているため、nib に含まれるものと本質的に競合するなど、問題が発生する可能性があります。必要に応じて引数を渡す限り、通常どおり initWithCoder をオーバーライドできますsuperが、指定された初期化子でオブジェクトを初期化すると、これは呼び出されません。もちろん、心配する必要がある場合は、両方で実行したいすべてのコードを、両方のオーバーライドされたメソッドから呼び出されるメソッドに入れることができます。

于 2010-01-24T19:27:22.067 に答える