8 Stimmen

UIImagePickerController reagiert nach dem Tippen auf die Schaltfläche "Verwenden" nicht mehr

Ich habe eine App, die Videos aufnimmt. Die App ist eine Mischung aus cocos2d und UIKit, obwohl der Teil mit der UIImagePickerController alle UIKit ist.

Das Problem: Wenn Sie nach der Aufnahme eines Videos auf die Schaltfläche "Verwenden" tippen, wechselt die Schaltfläche in den ausgewählten Status und dann passiert nichts mehr. Die Schaltfläche "Erneut aufnehmen" ist deaktiviert. Sie können das Video immer noch abspielen/anhalten, aber die Ansicht wird nicht geschlossen und - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info wird nie aufgerufen.

Das Problem tritt bei langen und kurzen (<5 Sekunden) Videos auf. Das Verursachen von Speicherwarnungen hat das Problem nicht reproduziert. Auch das Wechseln der Audiositzungen vor dem Start der Bildauswahl führte nicht zur Behebung des Problems.

Ich konnte die Ursache des Problems nicht finden. Es tritt nur gelegentlich auf. Irgendwelche Ideen?

Hier ist der Code, der den UIImagePickerController darstellt

  UIImagePickerController *tmpVC = [[UIImagePickerController alloc] init];
  tmpVC.delegate = self;
  tmpVC.allowsEditing = YES;
  // First get the right media types for the right source
  NSArray *types = nil;
  if (useCamera)
  {
    types = [UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypeCamera];
    tmpVC.sourceType = UIImagePickerControllerSourceTypeCamera;
  }
  else
  {
    types = [UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
    tmpVC.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
  }

  // Then see if "movie" is in there
  for (NSString *mediaType in types)
  {
    if ([mediaType isEqualToString:(NSString*)kUTTypeMovie])
    {
      tmpVC.mediaTypes = [NSArray arrayWithObjects:(NSString*)kUTTypeImage,(NSString*)kUTTypeMovie,nil];
      tmpVC.videoQuality = UIImagePickerControllerQualityTypeHigh;
    }
  }

  // Present the configured controller
  [self presentModalViewController:tmpVC animated:YES];
  [tmpVC release];

1voto

Mihai Fratu Punkte 7491

Testen Sie die Anwendung im Simulator? Versuchen Sie, sie auf einem Gerät zu testen, um zu sehen, ob sie dasselbe tut. Ich erinnere mich, dass ich ein ähnliches Problem hatte, bei dem ich kein Video mit dem Picker im Simulator auswählen konnte, weil die Anwendung einfach "hängen blieb", nachdem ich die Schaltfläche "Verwenden" gedrückt hatte.

1voto

Milk Tea Punkte 141

Ich würde schauen, wo sonst in Ihrem Code, ist es in einem if-Anweisung aufgerufen? Hast du das Ding, das die - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info. Das sind nur ein paar kleine Dinge, auf die ich achten würde, plus ein NSLog() aufrufen, wo Sie den Aufruf der Funktion sehen, um zu wissen, dass sie aufgerufen wurde, oder es könnte ein Fehler vorliegen.

1voto

Die Ursache für mein Problem war, dass in iOS 5,

[picker.parentViewController dismissModalViewControllerAnimated:YES]

nicht mehr funktioniert - parentViewController ist gleich Null. Verwirrenderweise führt dies dazu, dass die Picker-Ansicht zwar "beendet", aber nicht entlassen wird, sondern einfach inaktiv bleibt.

Stattdessen können Sie verwenden:

[picker.presentingViewController dismissModalViewControllerAnimated:YES]

Dies funktioniert jedoch nicht in iOS 4, da es keine presentingViewController Nachricht.

Sie können entweder eine Kategorie schreiben, die automatisch die richtige auswählt, oder einen Verweis auf den View Controller behalten, der sie manuell präsentiert hat. In meinem Fall war der Delegat zum Beispiel auch der Viewcontroller, der sie präsentiert hat, also konnte ich

[self dismissModalViewControllerAnimated:YES]

In meinem Selektor.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X