1

J'ai un UIImagePickerController comme une propriété synthétisée de mon contrôleur de vue.UIImagePickerController ne se ferme pas après l'avertissement de mémoire

En général, cela fonctionne bien (prendre/prendre des photos, rappeler, etc.). Cependant, quand je reçois un avertissement de mémoire (didReceiveMemoryWarning est appelé sur le contrôleur de vue), bien que l'application semble le manipuler avec élégance (viewDidLoad est appelé pour que la vue soit à nouveau configurée sans aucune vue extérieure - l'application ne plante pas) et le UIImagePickerController me permet de prendre une photo, la vue de UIImagePickerController (dans ce cas la caméra) n'est pas rejetée. L'appareil photo reste à l'écran avec les boutons Retake et Use grisés.

J'ai essayé de paramétrer self.imagePicker = nil dans viewDidUnload et j'ai également essayé de NE PAS le faire (ainsi le contrôleur de vue ne l'a pas 'oublié' quand il doit le fermer après l'avertissement de mémoire). Une fois la photo prise après l'avertissement de mémoire, l'imagePicker effectue un rappel avec succès (didFinishPickingMediaWithInfo), mais la vue imagePicker reste affichée à l'écran.

Toute aide ou idée serait grandement appréciée.

+0

Fonctionne-t-il correctement sans avertissement de mémoire? Retirez-vous la vue du sélecteur de son aperçu? – Eiko

+0

Cela fonctionne correctement. Dans imagePickerControllerDidCancel et didFinishPickingMediaWithInfo j'utilise: [self.imagePicker dismissModalViewControllerAnimated: YES]; –

+3

Si vous souhaitez que le sélecteur d'image soit ignoré lorsque l'application reçoit un avertissement de mémoire, vous devez probablement l'ignorer dans didReceiveMemoryWarning: ... Je ne pense pas que le système d'exploitation présume que l'utilisateur a fini avec le sélecteur d'image. finit. – Kalle

Répondre

3

Merci beaucoup à Kalle pour les commentaires et, fondamentalement, pour résoudre le problème. La réponse a été que je n'avais pas seulement besoin de m'assurer que l'imagePicker n'était pas définie sur nil dans viewDidUnload, mais que je devais ensuite le supprimer/le supprimer dans didReceiveMemoryWarning. Si simple quand vous connaissez la réponse - doh !! ; o)

Merci encore, StackOverflow.

+1

Heureux de vous entendre l'avoir résolu. :) – Kalle

Questions connexes