2012-03-26 9 views
1

Ich versuche, UIImagePickerController verwenden, um ein Foto von den Fotos des Benutzers auf ihrem iPhone/iPad zu greifen. Dieser Code funktioniert gut für das iPhone, aber wenn ich es auf dem iPad ausfühle, gibt der Debugger mir die Meldung "App aufgrund der nicht abgefangenen Ausnahme beenden 'NSGenericException', Grund: '- [UIPopoverController dealloc] erreicht, während das Popover noch sichtbar ist." Ich bin sehr neu in Objective-C, also bin ich mir nicht sicher, was das verursacht, ich mache nichts mehr und ich habe ARC eingeschaltet. Hier ist mein Code: ViewController.mStrange Fehler mit UIPopoverController

#import "PhotoViewController.h" 


@implementation PhotoViewController 
@synthesize grabButton; 
@synthesize image; 
@synthesize imgPicker; 

- (IBAction)grabImage { 
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) { 
     UIPopoverController *popover = [[UIPopoverController alloc] initWithContentViewController:imgPicker]; 
     [popover presentPopoverFromRect:self.image.bounds inView:self.image permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 

    } else { 
     [self presentModalViewController:imgPicker animated:YES]; 
    } 
} 

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)img editingInfo:(NSDictionary *)editInfo { 
    image.image = img; 
    [[picker parentViewController] dismissModalViewControllerAnimated:YES]; 
} 

- (void)viewDidLoad 
{ 
    self.imgPicker = [[UIImagePickerController alloc] init]; 
    self.imgPicker.allowsImageEditing = YES; 
    self.imgPicker.delegate = self; 
    self.imgPicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view from its nib. 

} 
+0

Mögliche Betrogene: http : //stackoverflow.com/questions/8895071/uipopovercontroller-dealloc-reached-while-popover-is-still-visible – CodaFi

+0

Ich habe mir das vor dem Posting angesehen, leider hat es nicht geholfen. –

Antwort

3

UIPopover ist ein hässliches Patchwork Tier eines Objekts. Es muss eine starke Eigenschaft und ein iVar sein, um sicherzustellen, dass Dealloc nicht vorzeitig erreicht wird. Fügen Sie diese in der .h Wie so:

@interface MyClass: NSObject { 
    UIPopover *_popover; 
} 
@property (nonatomic, strong) UIPopover * popover; 

//.m 

@synthesize popover = _popover; 

Wenn Sie die popover instanziiert, weisen Sie sie entweder das Eigentum oder die Instanz:

self.popover = [[UIPopoverController alloc] initWithContentViewController:imgPicker]; 

oder

_popover = [[UIPopoverController alloc] initWithContentViewController:imgPicker]; 
+0

Vielen Dank! Welche Klasse sollte ich allerdings löschen? Tut mir leid, ich bin neu im Programmieren. Außerdem habe ich alle Änderungen, die Sie oben gepostet haben, hinzugefügt, aber derselbe Fehler tritt immer noch auf. –

+0

Wenn Sie Eigenschaften oder iVars hinzufügen (wie oben), müssen Sie alle iVars mit in Konflikt stehenden Namen löschen, sonst überschatten sie die iVar, die Sie in der .h deklariert haben. Löschen Sie einfach jede Erwähnung von UIPopover (das Wort, nicht die Objekte) aus Ihrer .m-Datei. – CodaFi

+0

Super, danke nochmal! –