2012-12-18 4 views
7

Ich habe eine App, die Sie ein Foto mit der iPhone-Kamera machen können. Alles funktioniert wie ein Zauber, aber beim Testen auf einem neuen Gerät, das nicht genügend Speicherplatz zur Verfügung hat, hat die Kamera App nicht abgelehnt.Kamera App nicht entlassen, wenn "Nicht genug verfügbaren Speicher ..." auf dem iPhone

Also im Grunde öffne ich die Bildauswahl mit der Quellkamera, ich bekomme ein Popup, das sagt: "Es gibt nicht genug verfügbaren Speicher für ein Foto ..." und dann, wenn ich OK drücke, bin ich in der Kamera App, mit geschlossenem Verschluss und beiden Tasten "Foto machen" und "Abbrechen" ausgegraut. Von diesem Punkt an ist das einzige, was ich tun kann, um die App zu töten, da es keine Möglichkeit gibt, diesen Bildschirm zu verlassen.

In meinem Code nenne ich die Kamera mit so etwas wie:

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

Das Objekt, das das nennen, ist natürlich ein UIImagePickerControllerDelegate und ich beide Delegatmethoden implementieren (beide reagieren richtig auf Erfolg und Abbrechen Veranstaltungen):

Dieses Verhalten "Kein Platz verfügbar" fällt nicht auf eine der Delegate-Methoden, daher kann ich die Kamera-App nicht programmatisch schließen.

Irgendwelche Gedanken?

EDIT:

Beim Versuch, die App im Simulator zu laufen, wo die Kamera nicht verfügbar ist, ich die App abstürzt bemerkt, weil die Quelle nicht verfügbar war. Ich fand heraus, dass einfach ein nicht verfügbar source zum photoPicker zuweisen, noch vor dem Controller Aufruf würde die App zum Absturz bringen, also habe ich den Code auf die folgende:

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

Dieses immer noch mein Problem nicht beheben, aber es ist ein interessantes Ergebnis.

+1

Probieren Sie 'isSourceTypeAvailable' aus, bevor Sie den Picker präsentieren. Vielleicht dachte Apple an diesen Fall. –

+0

Ich habe tatsächlich bereits 'isSourceTypeAvailable' in meinem Code als Voraussetzung für die Präsentation des photoPicker, ich habe es einfach entfernt, um ein einfacheres Snippet zu zeigen. Danke für den Beitrag trotzdem! Ich werde den ursprünglichen Post damit bearbeiten. – manecosta

+0

Eigentlich habe ich gerade herausgefunden, dass die Überprüfung von 'isSourceTypeAvailable' vor der Präsentation von photoPicker nicht gut ist, als ob die Quelle nicht verfügbar wäre, sie stürzt direkt bei der Verteilung von' .sourceType' ab. Das hat meinem Problem immer noch nicht geholfen. Ich werde jedoch meinen ursprünglichen Beitrag aktualisieren, um diesen Befund widerzuspiegeln. – manecosta

Antwort

1

Das Problem ist nicht mit der Kamera, aber der Rest der Anwendung: Kamera hat didReceiveMemoryWarning ausgetrickst und damit die Ansicht "getötet", wo Sie versucht haben, zurückzukehren. Es ist einfach nicht mehr da.

Der Fix ist UIViewController zu implementieren viewDidLoad, viewDidUnload, viewWillDisappear, viewWillAppear etc. und stellen Sie sicher, dass Ihre App kann durch Speicher Situation durch Kamera verursacht und initialisieren alles benötigte, wenn die Kamera verschwindet.

+0

Ich habe das alles implementiert, aber ohne Erfolg. Der Fehler bezieht sich nicht auf Speichermangel, Speichermangel. Wenn ich die Kamera öffne, bekomme ich 'viewDidDisappear', wie man es erwartet, da der Camera Controller den aktuellen ersetzt, aber nicht in' viewDidUnload' oder 'didReceiveMemoryWarning'. Danke, dass du versucht hast zu helfen! – manecosta

Verwandte Themen