UIImagePickerController + ARC + UIImageView

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • UIImagePickerController + ARC + UIImageView

    Hi,

    ich benutze folgenden Code um ein Bild von der Kamera zu machen und dieses dann in einen UIImageView zu setzen.

    Quellcode

    1. - (void)takePicture:(id)sender
    2. {
    3. if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
    4. UIImagePickerController* imagePicker = [[UIImagePickerController alloc] init];
    5. [imagePicker setDelegate:self];
    6. // Use camera if device has one otherwise use photo library
    7. if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
    8. [imagePicker setSourceType:UIImagePickerControllerSourceTypeCamera];
    9. } else {
    10. [imagePicker setSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
    11. }
    12. // Show image picker
    13. [self presentModalViewController:imagePicker animated:YES];
    14. }
    15. }
    Alles anzeigen


    Quellcode

    1. - (void)imagePickerController:(UIImagePickerController*)picker didFinishPickingMediaWithInfo:(NSDictionary*)info
    2. {
    3. UIImage* image = [info objectForKey:UIImagePickerControllerOriginalImage];
    4. CGSize retinaSize = CGSizeMake(imageView.frame.size.width*2, imageView.frame.size.height*2);
    5. UIImage* croppedImage = [image imageByScalingAndCroppingForSize:retinaSize opaque:YES];
    6. [self dismissModalViewControllerAnimated:YES];
    7. patientImageView.image = croppedImage;
    8. }


    Problem ist, dass nach dem dismissModalViewController das Bild nicht gesetzt wird. Nach einem erneuten Aufruf des PickerViews geht's, wenn ich kein Bild damit mache.
    Keine Memory Warnings nix.

    Irgendwelche Ideen?
  • Ist es nicht so, dass dein ImagePicker direkt nach dem Verlassen der erstenMethode durch ARC wieder freigegeben wird ? Must du nicht eine Property mit strong erstellen und den Picker dort solange halten, bis er dismissed wird ?

    Ich habe noch nicht mit ARC gearbietet aber das erschiene mir logisch.

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • hm, ist das dismissmodalviewcontroller nicht auch verkehrt? Du dismisst ja damit dich selber (also den aktuellen Viewcontroller) und wie willst du danach noch die property zuweisen ?

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • Wenn du jetzt eine Property für den Picker hast, dann mach doch einfach mal versuchsweise einen

    Quellcode

    1. [picker dismissModalViewControllerAnimated:YES];


    Ka ob es was ändert, kost aber auch nichts :)

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • Vermutlich rufst du den Setter zu spät auf.
    Wenn du die beiden Aufrufe drehst, also ein

    C-Quellcode

    1. patientImageView.image = croppedImage;
    2. [self dismissModalViewControllerAnimated:YES];

    daraus machst, geht es dann?

    Ich hatte mit PickerViews gern so meine liebe Not. Auch mit dem ARP gab das gern mal Probleme und ich habe dann versucht mich mit manuellem ausgelagertem -retain und -release zu behelfen.
    Bei ARC dürfte das natürlich in die Grütze gehen a.k.a. mit Compilerfehlern unterbunden werden.

    Meine Vermutung ist, dass der pickerView mit dem dismiss weggeräumt wird und damit auch alle damit verknüpften Images und du sie mit dem Setter retten kannst.
    Den PickerView künstlich am Leben erhalten wollen finde ich... unpassend. ;)

    Probier's bitte mal aus. :)
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • Ha! Mit nem Completion Block gehts...Dämlicher ModelView...

    Quellcode

    1. [self presentViewController:imagePicker animated:YES completion:^{
    2. debug(gLocation,@"ImagePickerView presented!");
    3. }];


    Quellcode

    1. [self dismissViewControllerAnimated:YES completion:^ {
    2. imageView.image = croppedImage;
    3. debug(gLocation,@"ImagePickerView dismissed and Image set!");
    4. }];