2012-12-18 15 views
7

Mam aplikację, która pozwala Ci zrobić zdjęcie aparatem iPhone. Wszystko działa jak zaklęcie, ale podczas testowania na nowym urządzeniu, które nie miało wystarczającej ilości wolnego miejsca, aplikacja aparatu nie została odrzucona.Aplikacja aparatu nie odrzuca, gdy "Niewystarczająca ilość wolnego miejsca ..." na iPhonie

W zasadzie otwieram selektor zdjęć z kamerą źródłową, pojawia się wyskakujące okienko z napisem "Brak wystarczającej ilości wolnego miejsca na zrobienie zdjęcia ...", a następnie po naciśnięciu OK, jestem w aplikacji Aparat, z zamkniętą roletą i oba przyciski "take photo" i "cancel" są wyszarzone. Od tego momentu jedyną rzeczą, którą mogę zrobić, to zabić aplikację, ponieważ nie ma sposobu, aby opuścić ten ekran.

W moim kodu Wzywam aparat z czymś takim:

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

tym obiektem, którego nazywają to oczywiście UIImagePickerControllerDelegate i wdrożyć obie metody delegata (zarówno odpowiedzieć prawidłowo na sukces i anulować zdarzenia):

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

To zachowanie "brak dostępnej przestrzeni" nie należy do żadnej z metod delegatów, więc nie mogę programowo odrzucić aplikacji aparatu.

Jakieś myśli?

EDIT:

Kiedy próbuje uruchomić aplikację w symulatorze, w którym aparat nie jest dostępny zauważyłem App upaść dlatego, że źródło było niedostępne. I okazało się, że po prostu przypisanie brak sourceType do photoPicker, nawet przed wywołaniem kontroler, by rozbić aplikację, więc zmieniłem kod na następujący:

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

to nadal nie rozwiązuje mojego problemu, ale to interesujące odkrycie.

+1

wypróbuj 'isSourceTypeAvailable' przed wyświetleniem selektora. Może jabłko pomyślało o tej sprawie. –

+0

Faktycznie mam już "isSourceTypeAvailable" w moim kodzie jako warunek prezentacji photoPicker, po prostu rozebrałem go, aby pokazać prostszy fragment. Dzięki za wkład! Będę edytować oryginalny post z tym. – manecosta

+0

Właśnie się dowiedziałem, że sprawdzenie 'isSourceTypeAvailable' przed przedstawieniem photoPicker'a nie jest dobrym miejscem do zrobienia, tak jakby źródło było niedostępne, ulega awarii w atrybucie' .sourceType'. To nadal nie pomogło w moim problemie. Zaktualizuję jednak mój pierwotny wpis, aby odzwierciedlić to stwierdzenie. – manecosta

Odpowiedz

1

Problem nie dotyczy kamery, ale reszta aplikacji: kamera oszukała didReceiveMemoryWarning i tym samym "zabiła" widok, do którego próbowałeś powrócić. Po prostu już go tam nie ma.

Rozwiązaniem jest wprowadzenie UIViewController za viewDidLoad, viewDidUnload, viewWillDisappear, viewWillAppear itp i upewnij się, że aplikacja może obsługiwać z sytuacją pamięci spowodowane przez aparat i zainicjować wszystko potrzebne, gdy kamera znika.

+0

Wdrożyłem to wszystko, ale bez powodzenia. Błąd nie jest związany z brakiem pamięci, jest to brak pamięci. Kiedy więc otworzę kamerę, otrzymam polecenie 'viewDidDisappear', tak jak można się tego spodziewać, ponieważ kontroler aparatu zastępuje bieżący, ale nie przechodzi do' viewDidUnload' ani nawet 'didReceiveMemoryWarning'. Dzięki za próbę pomocy! – manecosta