แอพกล้องจะไม่ปิดเมื่อพื้นที่เก็บข้อมูลบน iPhone ไม่เพียงพอ

ฉันมีแอพที่ให้คุณถ่ายรูปด้วยกล้องไอโฟน ทุกอย่างทำงานได้อย่างมีเสน่ห์ แต่เมื่อทำการทดสอบบนอุปกรณ์ใหม่ซึ่งมีพื้นที่เก็บข้อมูลไม่เพียงพอ แอปกล้องถ่ายรูปก็ไม่ได้ปิดลง

โดยพื้นฐานแล้ว ฉันเปิดเครื่องมือเลือกรูปภาพด้วยกล้องต้นทาง ฉันได้รับป๊อปอัปที่ระบุว่า "มีพื้นที่เก็บข้อมูลไม่เพียงพอสำหรับการถ่ายภาพ..." จากนั้นเมื่อฉันกดตกลง ฉันอยู่ที่แอปกล้องถ่ายรูปโดยปิดชัตเตอร์ไว้ และทั้งปุ่ม "ถ่ายรูป" และ "ยกเลิก" กลายเป็นสีเทา จากจุดนี้ สิ่งเดียวที่ฉันทำได้คือปิดแอปเนื่องจากไม่มีทางที่จะออกจากหน้าจอนี้ได้

ในโค้ดของฉัน ฉันเรียกกล้องว่า:

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

วัตถุที่เรียกสิ่งนี้แน่นอนว่าเป็น UIImagePickerControllerDelegate และฉันใช้วิธีการมอบหมายทั้งสองวิธี (ทั้งคู่ตอบสนองอย่างถูกต้องต่อความสำเร็จและยกเลิกกิจกรรม):

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

ลักษณะการทำงาน "ไม่มีที่ว่าง" นี้ไม่ตรงกับวิธีการมอบหมายใด ๆ ดังนั้นฉันจึงไม่สามารถปิดแอปกล้องโดยทางโปรแกรมได้

มีความคิดอะไรบ้าง?

แก้ไข:

เมื่อพยายามเรียกใช้แอปในเครื่องจำลองโดยที่กล้องไม่พร้อมใช้งาน ฉันสังเกตเห็นว่าแอปหยุดทำงานเนื่องจากแหล่งที่มานั้นไม่พร้อมใช้งาน ฉันพบว่าการกำหนด sourceType ที่ไม่พร้อมใช้งานให้กับ photoPicker แม้กระทั่งก่อนที่จะเรียกคอนโทรลเลอร์ จะทำให้แอปขัดข้อง ดังนั้นฉันจึงเปลี่ยนโค้ดเป็นดังนี้:

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

สิ่งนี้ยังคงไม่สามารถแก้ไขปัญหาของฉันได้ แต่เป็นการค้นพบที่น่าสนใจ


person manecosta    schedule 18.12.2012    source แหล่งที่มา
comment
ลอง isSourceTypeAvailable ก่อนที่จะนำเสนอเครื่องมือเลือก บางที Apple ก็คิดเรื่องนี้   -  person Jonathan Cichon    schedule 19.12.2012
comment
จริงๆ แล้วฉันมี isSourceTypeAvailable ในโค้ดอยู่แล้วเป็นเงื่อนไขในการนำเสนอ photoPicker ฉันเพิ่งถอดมันออกเพื่อแสดงตัวอย่างที่ง่ายกว่า ขอบคุณสำหรับการสนับสนุนอย่างไรก็ตาม! ฉันจะแก้ไขโพสต์ต้นฉบับด้วยสิ่งนั้น   -  person manecosta    schedule 19.12.2012
comment
จริงๆ แล้ว ฉันเพิ่งพบว่าการตรวจสอบ isSourceTypeAvailable ก่อนนำเสนอ photoPicker ไม่ใช่ที่ที่ดีที่จะทำเช่นนั้น ราวกับว่าแหล่งที่มาไม่พร้อมใช้งาน มันจะขัดข้องตรงที่การระบุแหล่งที่มาของ .sourceType นี่ยังไม่ได้ช่วยปัญหาของฉัน ฉันจะอัปเดตโพสต์ต้นฉบับของฉันเพื่อสะท้อนถึงการค้นพบนี้   -  person manecosta    schedule 19.12.2012
comment
ฉันกำลังประสบปัญหาเดียวกันกับแอปของฉัน ฉันอยากรู้ว่าคุณจัดการกับสถานการณ์อย่างไร   -  person KDaker    schedule 26.07.2013
comment
ความจริงก็คือฉันไม่ได้ ฉันไม่พบวิธีจัดการกับสถานการณ์นี้   -  person manecosta    schedule 13.09.2013


คำตอบ (1)


ปัญหาไม่ได้อยู่ที่กล้อง แต่ส่วนที่เหลือของแอปพลิเคชัน: กล้องหลอก didReceiveMemoryWarning และดังนั้นจึง "ทำลาย" มุมมองที่คุณพยายามจะกลับไป มันก็ไม่ได้อยู่ที่นั่นอีกต่อไป

การแก้ไขคือการใช้ viewDidLoad, viewDidUnload, viewWillDisappear, viewWillAppear ฯลฯ ของ UIViewController และตรวจสอบให้แน่ใจว่าแอปของคุณสามารถจัดการกับสถานการณ์หน่วยความจำไม่เพียงพอที่เกิดจากกล้องได้ และเริ่มต้นทุกสิ่งที่จำเป็นเมื่อกล้องหายไป

person JOM    schedule 19.12.2012
comment
ฉันดำเนินการทั้งหมดแล้ว แต่ไม่ประสบความสำเร็จ ข้อผิดพลาดไม่เกี่ยวข้องกับการขาดหน่วยความจำ แต่เกิดจากการขาดพื้นที่เก็บข้อมูล ดังนั้นเมื่อฉันเปิดกล้อง ฉันจะถูกเรียก viewDidDisappear ตามที่ใครๆ คาดหวัง เนื่องจากตัวควบคุมกล้องมาแทนที่อันปัจจุบัน แต่มันไม่เข้า viewDidUnload หรือแม้แต่ didReceiveMemoryWarning ขอบคุณที่พยายามช่วย! - person manecosta; 19.12.2012