2015-04-24 13 views
11

Ich erhalte einen Absturz in verschiedenen Versionen meiner Apps und es scheint, dass es auf iOS8 passiert ist. Ich erfahre es nur durch Absturzberichte und kann es nicht auf meinen Testgeräten reproduzieren. Es scheint zu sein, wenn ein Benutzer ein Bild aufnimmt (oder es aus der Bibliothek auswählt), und das Originalbild kann nicht eingestellt werden, weil das Bild null ist. Die nächste Frage, die ich finden kann, während der Suche ist dies:UIImagePickerControllerOriginalImage Kein Absturz beim Aufnehmen von Fotos

https://github.com/B-Sides/ELCImagePickerController/issues/58

Eine andere Möglichkeit ist, wenn es mit einem bestimmten Race-Bedingung Timing backgrounded ist, die ich zu reproduzieren auch nicht in der Lage bin.

http://openradar.appspot.com/19953748

aber ich glaube nicht, mein Fehler wird aus einem Stream Bild kommende ausgewählt wird. Ich hoffe zu sehen, ob jemand anderen diesen Fehler bekommt, und hat entweder eine Lösung gefunden, um die Ausnahme konsequent zu erfassen, oder erkennen, wenn dies passiert, oder eine bestimmte Benutzeraktion (wie Hintergrund der App beim Hochladen von Fotos) zu vermeiden ein Unfall.

Fatal Exception: NSInvalidArgumentException *** setObjectForKey: Objekt kann nicht null sein (Schlüssel: UIImagePickerControllerOriginalImage)

Thread : Fatal Exception: NSInvalidArgumentException 
0 CoreFoundation     0x2b381fef __exceptionPreprocess + 126 
1 libobjc.A.dylib    0x39633c8b objc_exception_throw + 38 
2 CoreFoundation     0x2b29daa3 -[__NSDictionaryM setObject:forKey:] + 850 
3 PhotoLibrary     0x345bf8f3 __CreateInfoForImage 
4 PhotoLibrary     0x345bf1ad PLNotifyImagePickerOfImageAvailability 
5 PhotoLibrary     0x345d384b -[PLUICameraViewController cameraView:photoSaved:] 
6 PhotoLibrary     0x34606a73 -[PLImagePickerCameraView cropOverlay:didFinishSaving:] 
7 PhotoLibrary     0x3460706d -[PLImagePickerCameraView captureController:didCompleteResponse:forStillImageRequest:error:] 
8 CameraKit      0x303392a5 -[CAMCaptureController _completedResponse:forRequest:error:] 
9 CameraKit      0x30338bfb __56-[CAMCaptureController enqueueStillImageCaptureRequest:]_block_invoke_32160 
10 libdispatch.dylib    0x39b9e2e3 _dispatch_call_block_and_release + 10 
11 libdispatch.dylib    0x39b9e2cf _dispatch_client_callout + 22 
12 libdispatch.dylib    0x39ba1d2f _dispatch_main_queue_callback_4CF + 1330 
13 CoreFoundation     0x2b347609 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 8 
14 CoreFoundation     0x2b345d09 __CFRunLoopRun + 1512 
15 CoreFoundation     0x2b292201 CFRunLoopRunSpecific + 476 
16 CoreFoundation     0x2b292013 CFRunLoopRunInMode + 106 
17 GraphicsServices    0x32b71201 GSEventRunModal + 136 
18 UIKit       0x2ea36a59 UIApplicationMain + 1440 
19 Pact       0x000b26ab main (main.m:17) 
20 libdyld.dylib     0x39bbfaaf start + 2 

EDIT 18. September 2017 Ich habe dieses Problem nicht neu aufgelegt und haben keine Lösung gefunden, leider: (

+1

"Das nächste Problem, das ich bei der Suche finden kann, ist dies". Ich habe eine Google-Suche gemacht, und nichts Relevantes kommt auf. Also, eine Frage zum Stapelüberlauf stellen. Hoffentlich führt eine Google-Suche zu dieser Frage. – mitrenegade

+0

Okay, ich werde es für dich googlen. Zum Beispiel fand ich das: http://www.openradar.appspot.com/19953748 Ziemlich aufschlussreich, denke ich. – matt

+0

Danke für den Link. Ich erinnere mich, dass ich das gesehen habe. Sieht auch nicht so aus, als hätten sie irgendwelche Antworten oder Lösungen. Also, um zu folgen, und vielleicht muss meine Frage neu formuliert werden - hat jemand eine Lösung dafür? Ich war nicht in der Lage, den Absturz in meiner App auch während des Hintergrunds zu reproduzieren. – mitrenegade

Antwort

0
If you write tap gesture or action sheet,just check the below code with your code. 

-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex 
    { 
    UIImagePickerController *pickerController = [[UIImagePickerController alloc]init]; 
    pickerController.delegate=self; 
    if(buttonIndex==0) 
    { 
     pickerController.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum; 
     [self presentViewController:pickerController animated:YES completion:nil]; 
    } 
    else if(buttonIndex==1) 
    { 
     if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera] == YES) 
     { 
      NSLog(@"Camera is available and ready"); 
      pickerController.sourceType=UIImagePickerControllerSourceTypeCamera; 
      [self presentViewController:pickerController animated:YES completion:nil]; 
     } 
     else 
     { 
      NSLog(@"Camera is not available"); 
      [[[UIAlertView alloc]initWithTitle:@"Whoa !" message:@"Camera is not available" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil]show]; 
     } 
    } 

    } 

dann in Delegatmethode,

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

     UIImage *image = [info objectForKey:@"UIImagePickerControllerOriginalImage"]; 
     imageView.image = image; 
     [picker dismissViewControllerAnimated:YES completion:nil]; 
    } 
+0

Die Ausnahme scheint zu erfolgen, wenn das Bild mit Informationen gefüllt wird. In der Stack-Ablaufverfolgung tritt der Absturz auf, weil das Kameraframework versucht, den Wert des Schlüssels UIImagePickerControllerOriginalImage auf Null zu setzen. Ich versuche zu verstehen, warum ein Bild, das wir ausgewählt haben, null sein kann - es ist kein Speicherproblem, da alle Absturzberichte keine Speicherwarnung anzeigen. – mitrenegade

+0

@mitrenegade haben Sie die Ursache dafür und jede Lösung? –

+0

Ich habe das nicht wieder besucht. Das letzte, woran ich mich erinnere, ist, dass es vielleicht mit dem Laden von Cloud-Fotos zu tun hat. leider keine antwort trotz matt's hilfe (/ s) – mitrenegade

3

Ich konnte diesen Absturz genau aus dem Szenario http://openradar.appspot.com/19953748 reproduzieren. Ich habe eine Endlosschleife eingerichtet, die alle 2 Sekunden ein Bild aufgenommen hat und die App kontinuierlich zwischen Hintergrund und Vordergrund verschoben hat. Es stürzt ziemlich schnell mit der gleichen Stapelverfolgung ab. Obwohl ich nicht sicher bin, was die Ursache dafür ist, kann ich es beheben, indem ich einfach den Anwendungsstatus überprüfe, bevor ich das Bild mache.

+0

Ich habe festgestellt, dass ich das ziemlich viele Male replizieren kann, wenn der FlashMode auf On gesetzt ist. Drücken Sie einfach den Auslöser und dann drücken Sie schnell die Einschalttaste, um das Telefon zu sperren. Wenn Sie dies bemerken, senden Sie bitte ein Radar an https://bugreport.apple.com. Hier ist meins: https://openradar.appspot.com/28108858 – cduhn

+1

@Kedar Hallo, ich habe gerade das gleiche Problem entdeckt. Wo genau hast du deinen Code abgelegt? Ich bekomme immer noch den Absturz. Ich habe versucht, es in: func imagePickerController (_ Picker: UIImagePickerController, didFinishPickingMediaWithInfo Infos: [String: Alles]) { wenn UIApplication.shared.applicationState == .active { wenn lassen chosenImage = info [UIImagePickerControllerOriginalImage] wie? UIImage {.. } –

Verwandte Themen