Aplikasi Kamera tidak menutup saat Penyimpanan yang tersedia di iPhone tidak mencukupi

Saya memiliki aplikasi yang memungkinkan Anda mengambil gambar dengan kamera iPhone. Semuanya berfungsi dengan baik, tetapi saat pengujian pada perangkat baru yang kebetulan tidak memiliki cukup penyimpanan, aplikasi kamera tidak ditutup.

Jadi pada dasarnya saya membuka pemilih gambar dengan kamera sumber, saya mendapatkan popup yang mengatakan "Penyimpanan yang tersedia tidak cukup untuk mengambil foto..." dan kemudian ketika saya menekan OK, saya berada di aplikasi Kamera, dengan rana tertutup , dan tombol "ambil foto" dan "batal" berwarna abu-abu. Mulai saat ini, satu-satunya hal yang dapat saya lakukan adalah mematikan aplikasi karena tidak ada cara untuk keluar dari layar ini.

Dalam kode saya, saya memanggil kamera dengan sesuatu seperti:

UIImagePickerController * photoPicker= [[UIImagePickerController alloc] init];
photoPicker.delegate = self;
photoPicker.sourceType = UIImagePickerControllerSourceTypeCamera;
if ([UIImagePickerController isSourceTypeAvailable:photoPicker.sourceType]) {
    [self presentModalViewController:photoPicker animated:YES];
}

Objek yang memanggil ini tentu saja adalah UIImagePickerControllerDelegate dan saya mengimplementasikan kedua metode delegasi (keduanya merespons dengan benar terhadap keberhasilan dan pembatalan acara):

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info;
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker;

Perilaku "tidak ada ruang tersedia" ini tidak termasuk dalam metode delegasi mana pun, jadi saya tidak dapat menutup aplikasi kamera secara terprogram.

Ada pemikiran?

EDIT:

Saat mencoba menjalankan aplikasi di simulator di mana Kamera tidak tersedia, saya melihat Aplikasi mogok karena sumber itu tidak tersedia. Saya menemukan bahwa hanya menugaskan sourceType yang tidak tersedia ke photoPicker, bahkan sebelum memanggil pengontrol, akan membuat aplikasi crash, jadi saya mengubah kode menjadi berikut:

UIImagePickerController * photoPicker= [[UIImagePickerController alloc] init];
photoPicker.delegate = self;
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
    photoPicker.sourceType = UIImagePickerControllerSourceTypeCamera;
}else{
    return;
}
[self presentModalViewController:photoPicker animated:YES];

Ini masih belum menyelesaikan masalah saya, tetapi ini merupakan temuan yang menarik.


person manecosta    schedule 18.12.2012    source sumber
comment
coba isSourceTypeAvailable sebelum menampilkan Picker. Mungkin apple memikirkan kasus ini.   -  person Jonathan Cichon    schedule 19.12.2012
comment
Saya sebenarnya sudah memiliki isSourceTypeAvailable dalam kode saya sebagai syarat untuk menampilkan photoPicker, saya hanya menghapusnya untuk menampilkan cuplikan yang lebih sederhana. Terima kasih atas kontribusinya! Saya akan mengedit postingan asli dengan itu.   -  person manecosta    schedule 19.12.2012
comment
Sebenarnya saya baru tahu bahwa memeriksa isSourceTypeAvailable sebelum menampilkan photoPicker bukanlah cara yang baik untuk melakukannya, karena jika sumbernya tidak tersedia, maka crash tepat di atribusi .sourceType. Ini masih tidak membantu masalah saya. Saya akan memperbarui posting asli saya untuk mencerminkan temuan ini.   -  person manecosta    schedule 19.12.2012
comment
Saya menghadapi masalah yang sama dengan aplikasi saya. Saya ingin tahu bagaimana Anda menghadapi situasi ini.   -  person KDaker    schedule 26.07.2013
comment
Sebenarnya, saya belum melakukannya. Saya tidak menemukan cara untuk menghadapi situasi ini.   -  person manecosta    schedule 13.09.2013


Jawaban (1)


Masalahnya bukan pada kamera, tetapi aplikasi lainnya: kamera telah menipu didReceiveMemoryWarningdan dengan demikian "mematikan" tampilan, tempat Anda mencoba untuk kembali. Hanya saja, itu sudah tidak ada lagi.

Cara mengatasinya adalah dengan mengimplementasikan viewDidLoad, viewDidUnload, viewWillDisappear, viewWillAppear, dll. UIViewController dan memastikan aplikasi Anda dapat menangani situasi kehabisan memori yang disebabkan oleh Kamera dan menginisialisasi semua yang diperlukan, saat Kamera menghilang.

person JOM    schedule 19.12.2012
comment
Saya menerapkan semua itu tetapi tidak berhasil. Kesalahan ini tidak terkait dengan kurangnya memori, melainkan kurangnya penyimpanan. Jadi ketika saya membuka Kamera, saya mendapatkan viewDidDisappear dipanggil seperti yang diharapkan karena pengontrol Kamera menggantikan yang sekarang, tetapi tidak masuk ke viewDidUnload atau bahkan didReceiveMemoryWarning. Terima kasih telah mencoba membantu! - person manecosta; 19.12.2012