7

Ho un'app in cui sto usando UIImagePickerController per utilizzare il camer nativo per fare clic sulle immagini ma quando la galleria fotografica sul dispositivo è piena. Ricevo un messaggio di avviso che dice "Impossibile scattare foto - Non c'è abbastanza spazio disponibile per scattare una foto. Puoi gestire il tuo spazio di archiviazione nelle Impostazioni". Mi vengono date due opzioni per fare clic sul pulsante "Fatto" o sul pulsante "Impostazioni". Fare clic su uno di essi non fa nulla e l'app si blocca completamente.Come gestire un messaggio di avviso di sistema per iOS?

Questo è ciò che ottengo dai log della console

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

Il codice per il selettore

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

Ho implementato e provato tutti i delegati già e la sua non chiamare qualsiasi delegato.

Esiste un modo per implementare qualcosa in cui è possibile utilizzare un listener per rilevare quando si verifica questo errore e riportare l'utente alla schermata precedente?

+0

Cosa succede se lo fai: [UIImagePickerController isSourceTypeAvailable: UIImagePickerControllerSourceTypeCamera]? – lottscarson

risposta

1

Questo suona come un bug in iOS e si dovrebbe archiviare un radar here.

2

Sembra che il tuo dispositivo abbia esaurito la memoria, il sistema ha inviato molte notifiche di "memoria esaurita" e l'app ne ha ricevuta anche una. Come risultato l'app ha rilasciato UIViewController, che in origine ha lanciato UIImagePickerController.

Ora quando si chiude imagePicker con il pulsante Fine/Impostazioni, il controllo ritorna alla propria app. Il vecchio UIViewController non esiste più e non hai implementato il codice per ricrearlo da zero in questo tipo di situazioni. Il dispositivo sembra bloccato, ma solo perché l'interfaccia utente non è stata ridisegnata dalla tua app. Altrimenti l'app funziona perfettamente.

È possibile controllare questo caso per l'implementazione del metodo didReceiveMemoryWarning in ogni UIViewController e la registrazione, se si chiama:

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

Uno dei miei insetti preferiti. Facile da perdere :)

Problemi correlati