7

Mam aplikację, w której używam UIImagePickerController do korzystania z natywnej kamery do klikania obrazów, ale kiedy galeria zdjęć na urządzeniu jest pełna. Otrzymuję komunikat ostrzegawczy z napisem "Nie mogę zrobić zdjęcia" - brak wolnego miejsca do zrobienia zdjęcia. Możesz zarządzać swoją pamięcią w Ustawieniach ". Dostaję dwie opcje do kliknięcia przycisku "Gotowe" lub "Ustawienia". Kliknięcie któregokolwiek z nich nic nie robi i aplikacja całkowicie się zawiesza.Jak obsługiwać komunikat alertu systemowego dla systemu iOS?

To co ja dostać z dzienników konsoli

Not enough space to take a picture. Available space is 0 

Kod dla próbnika

UIImagePickerController *mediaPicker = [[UIImagePickerController alloc] init]; 
mediaPicker.sourceType = UIImagePickerControllerSourceTypeCamera; 
mediaPicker.delegate=self; 
mediaPicker.sourceType=UIImagePickerControllerSourceTypeCamera; 
[self presentModalViewController:mediaPicker animated:YES]; 

I wprowadziły i próbowała już wszystkich delegatów i jego niestawienie żadnego delegata.

Czy istnieje sposób, w jaki mogę zaimplementować coś, w którym mogę użyć detektora, aby wykryć, kiedy wystąpi ten błąd, i zabrać użytkownika do poprzedniego ekranu?

+0

Co się stanie, jeśli: [UIImagePickerController isSourceTypeAvailable: UIImagePickerControllerSourceTypeCamera]? – lottscarson

Odpowiedz

2

Wygląda na to, że na Twoim urządzeniu zabrakło pamięci, system wysłał wiele powiadomień "Brak pamięci", a Twoja aplikacja też je dostała. W rezultacie Twoja aplikacja wypuściła UIViewController, która pierwotnie uruchomiła UIImagePickerController.

Teraz, gdy odrzucisz przycisk imagePicker za pomocą przycisku Gotowe/Ustawienia, sterowanie powróci do Twojej aplikacji. Stary UIViewController już nie istnieje i nie zaimplementowałeś kodu, aby odtworzyć go od zera w tego rodzaju sytuacjach. Urządzenie wygląda na zamrożone, ale tylko dlatego, że interfejs użytkownika nie został przerysowany przez Twoją aplikację. W przeciwnym razie aplikacja działa dobrze.

Można sprawdzić tę sprawę poprzez wdrożenie metody didReceiveMemoryWarning do każdego UIViewController i rejestrowania, jeśli to się nazywa:

- (void)didReceiveMemoryWarning 
{ 
    NSLog(@"%@", [self description]); 
    [super didReceiveMemoryWarning]; 
} 

Jednym z moich ulubionych błędów. Łatwo przegapić :)