0

ich ein einfaches UIView Kind habe, und ich bin sehr verwirrt, warum ich diesen Fehler bin immer (die die App zum Absturz bringt):observeValueForKeyPath: Nachricht an deallokierten Instanz gesendet

[VideoView observeValueForKeyPath:ofObject:change:context:]: message sent to deallocated instance 0x13009b670

Hier das ist VideoView Klasse:

@implementation VideoView 

- (id)init { 
    self = [super init]; 
    if (self) { 
     [[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(stopVideo) 
              name:UIApplicationDidEnterBackgroundNotification 
              object:nil]; 
    } 
    return self; 
} 

- (void)dealloc { 
    [[NSNotificationCenter defaultCenter] removeObserver:self]; 
} 

//.. stopVideo method 

@end 

Hat mein nicht dealloc sicherzustellen, dass eine Benachrichtigung nie an einen ausgeplanten Instanz gesendet wird? Wie sonst kann ich das verhindern?

iOS 9, aktiviert ARC

Antwort

2

Sie mischen Dinge. Der Fehler wird nicht durch die NSNotificationCenter Benachrichtigung verursacht. Irgendwo in Ihrem Code verwenden Sie key-value observing und Sie entfernen diesen Beobachter nicht, wenn das Objekt nicht zugeordnet ist, weshalb der Absturz auftritt.

+0

Ahh rechts, Hinzufügen von '[self.player removeObserver: self forKeyPath: @" currentItem.status "];' löste das Problem. Seien Sie jedoch vorsichtig bei Ausnahmen: http://stackoverflow.com/questions/1582383/how-can-i-tell-if-an-object-has-a-key-value-observer-attached – Cbas