2012-12-18 23 views
7

Tôi có một ứng dụng cho phép bạn chụp ảnh bằng camera iphone. Mọi thứ hoạt động như một sự quyến rũ nhưng khi thử nghiệm trên thiết bị mới đã xảy ra không có đủ bộ nhớ, ứng dụng máy ảnh không loại bỏ. Vì vậy, về cơ bản tôi mở bộ chọn hình ảnh với máy ảnh nguồn, tôi nhận được một cửa sổ bật lên có nội dung "Không đủ bộ nhớ để chụp ảnh ..." và sau đó khi tôi nhấn OK, tôi đang ở ứng dụng Máy ảnh, với màn trập đóng, và cả hai nút "chụp ảnh" và "hủy" đều chuyển sang màu xám. Từ thời điểm này, điều duy nhất tôi có thể làm là giết ứng dụng vì không có cách nào rời khỏi màn hình này.Ứng dụng Máy ảnh không loại bỏ khi "Không đủ dung lượng lưu trữ ..." trên iPhone

Trong mã của tôi tôi gọi là máy ảnh với một cái gì đó như:

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

Đối tượng mà gọi đây là tất nhiên một UIImagePickerControllerDelegate và tôi thực hiện cả hai phương pháp đại biểu (cả đáp ứng một cách chính xác để thành công và hủy bỏ các sự kiện):

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

Hành vi "không có không gian trống" này không rơi vào bất kỳ phương pháp đại biểu nào, vì vậy tôi không thể loại bỏ ứng dụng máy ảnh theo cách có lập trình.

Mọi suy nghĩ?

EDIT:

Khi cố gắng để chạy các ứng dụng trong mô phỏng nơi Máy ảnh không có sẵn, tôi nhận thấy App đâm vì nguồn đó là không có. Tôi phát hiện ra rằng chỉ cần gán một sourceType không có sẵn cho các photoPicker, thậm chí trước khi gọi bộ điều khiển, sẽ sụp đổ các ứng dụng, vì vậy tôi đã thay đổi mã như sau:

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

này vẫn không khắc phục vấn đề của tôi, nhưng đó là một phát hiện thú vị.

+1

thử 'isSourceTypeAvailable' trước khi trình bày Bộ chọn. Có lẽ táo nghĩ về vụ này. –

+0

Tôi thực sự đã có 'isSourceTypeAvailable' trong mã của tôi như là một điều kiện để trình bày các photoPicker, tôi chỉ tước nó để hiển thị một đoạn mã đơn giản hơn. Cảm ơn sự đóng góp dù sao! Tôi sẽ chỉnh sửa bài đăng gốc với điều đó. – manecosta

+0

Trên thực tế tôi chỉ phát hiện ra rằng việc kiểm tra 'isSourceTypeAvailable' trước khi trình bày photoPicker không phải là một nơi tốt để làm như vậy, như thể nguồn không có sẵn, nó đổ vỡ ngay tại phân bổ' .sourceType'. Điều này vẫn không giúp được vấn đề của tôi. Tôi sẽ cập nhật bài đăng gốc của mình mặc dù phản ánh phát hiện này. – manecosta

Trả lời

1

Sự cố không phải với máy ảnh, nhưng phần còn lại của ứng dụng: máy ảnh đã lừa didReceiveMemoryWarning và do đó "đã chết" chế độ xem, nơi bạn đang cố gắng quay lại. Nó không còn nữa.

Khắc phục là triển khai chế độ xem của UIViewController, xemWillDisappear, viewWillAppear vv và đảm bảo ứng dụng của bạn có thể xử lý tình trạng bộ nhớ do Camera và khởi tạo mọi thứ cần thiết khi Máy ảnh biến mất.

+0

Tôi đã thực hiện tất cả điều đó nhưng không thành công. Lỗi không liên quan đến thiếu bộ nhớ, thiếu bộ nhớ. Vì vậy, khi tôi mở Camera, tôi nhận được 'viewDidDisappear' được gọi là một trong những mong đợi vì bộ điều khiển Camera thay thế hiện tại, nhưng nó không đi vào' viewDidUnload' hoặc thậm chí 'didReceiveMemoryWarning'. Cảm ơn bạn đã cố gắng để giúp đỡ! – manecosta

Các vấn đề liên quan