setImage funktioniert nicht

  • Ich habe Probleme beim Einstellen eines Bildes. Ich habe einen Delegierten, der mir mitteilt, wann ein Bild vom imagePickerController aufgenommen wird. Es sendet es an den Besitzer-Controller, und dann versuche ich, das Image auf einen anderen Controller zu setzen. Es scheint alles zu funktionieren ... aber wenn ich die Ansicht sehe, ist das Bild nicht da. Hier ist der Code:

     // this gets called when an image has been chosen from the library or taken from the camera
    // it is in the viewController in charge of grabbing an image (.m file)
    - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
    {
        UIImage *image = [info valueForKey:UIImagePickerControllerOriginalImage];
        if(self.delegate)
        {
            [self.delegate didAcquirePicture:image];
        }
    }
    
    
    //This is in the controller .m file
    - (void)didAcquirePicture:(UIImage *)picture 
    {
        if(picture != Nil)
        {
            self.photoEditView = [[PhotoEditViewController alloc] init];
            [self.photoPicker.imagePickerController dismissModalViewControllerAnimated:NO];
            [self.photoEditView.imageView setImage:picture];
            [self presentModalViewController: self.photoEditView animated:NO];
    
        }
    }
    
    //this is the photoEditViewController .h
    #import <UIKit/UIKit.h>
    
    @class PhotoEditViewController;
    
    @protocol PhotoEditViewControllerDelegate
    @end
    
    
    @interface PhotoEditViewController : UIViewController {
        IBOutlet UIImageView *imageView;
    }
    
    @property (retain) UIImageView *imageView;
    
    
    @end
    
    //this is the photoEditView .m file
    #import "PhotoEditViewController.h"
    
    @implementation PhotoEditViewController
    
    @synthesize imageView;
    
    
    - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
    {
        self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
        if (self) {
            // Custom initialization
        }
        return self;
    }
    
    - (void)dealloc {
        [super dealloc];
        [imageView dealloc];
    }
    
    @end
     
    04 December 2011
    James Rasmussen
2 answers
  • Möglicherweise wird das Bild freigegeben, wenn Sie den imagePickerController entfernen, bevor Sie es der imageView zuweisen. Wenn ja, können Sie dies mit

    [[picture retain] autorelease];

    beheben. Wie bereits erwähnt, testen Sie gegen nil nicht Nil. Es ist auch besser, [self.delegate respondsToSelector: @selector(didAcquirePicture)]; zu verwenden. Denken Sie daran, dass Sie Nachrichten sicher an nil senden können.

    22 November 2011
    David Dunham
  • HERAUSFORDERUNG DES PROBLEMS


    Es stellt sich heraus, dass mein Bild zuvor freigegeben wurde Die Ansicht wurde vollständig geladen, und die Kontrolle wurde an die Ereignisschleife zurückgegeben. Es war ein Timing-Problem, und ich war dumm, es nicht zu sehen. Also habe ich eine UIImage-Variable in meiner .h-Datei mit dem Namen tempImage erstellt. Dann füge ich diese ein: (void) viewDidLoad:

     self.imageView.image = tempImage;
     

    So sieht meine didAcquirePicture-Methode jetzt aus:

     - (void)didAcquirePicture:(UIImage *)picture 
    {
        if(picture != nil)
        {
            self.photoEditView = [[[PhotoEditViewController alloc] init] autorelease];
    
            self.photoEditView.tempImage = picture;
    
            [self.photoPicker.imagePickerController dismissModalViewControllerAnimated:NO];
            [self presentModalViewController: self.photoEditView animated:NO];
            [self.photoEditView setupStache];
        }
    }
     

    Ich bin im Grunde gerade Wenn ich das Image gespeichert habe, dann setze ich das Image in viewDidLoad. Danke an alle, die mir geholfen haben, zur endgültigen Antwort zu gelangen!

    04 December 2011
    James Rasmussen