2016-04-15 4 views
4

Meine Anwendung stürzt ab, wenn ich selbst als Beobachter übergebe, während NSNotification innerhalb der Singleton-Objekt-Erstellungsklassenmethode hinzugefügt wird. Bitte schauen Sie in den folgenden Code.Anwendungsabsturz beim Übergeben von Selbst als Beobachter beim Hinzufügen von Benachrichtigungen in der Singleton-Methode

+(DownloadThumbnail *)sharedDownloadThumbnailInstance{ 
    if(downloadThumbnail==nil){ 
     downloadThumbnail = [[DownloadThumbnail alloc]init]; 
     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(connectedToInternet) name:NotifyInternetConnection object:nil]; 

    } 
    return downloadThumbnail; 
} 

Ich habe um 4 bis 5 Stunden damit verbracht, den Absturz zu lösen, aber bekam keine Lösung.

+0

Sie können nicht selbst in einer Klassenmethode –

+0

passieren, wenn Sie Ihre Singleton Objekt Ihrer Viewcontroller wollen zuerst initialisieren das Objekt in viewDidLoad oder Loadview delegiert sonst werden Sie immer Null erhalten, bis die Ansicht nicht initialisiert –

+0

den kompletten Absturz anzeigen Log. – trojanfoe

Antwort

4

Look "self" -Zeiger geben Sie immer Referenz des aktuellen Klassenobjekts, aber wenn Sie diesen Zeiger unter der Klassenmethode verwenden, bedeutet dies, dass Sie Klassenzeiger z. B. "DownloadThumbnail" geben. Wenn also eine Benachrichtigung ausgelöst wird, wird sie ähnlich wie der unten stehende Code aufgerufen.

Da keine Klassenmethode für "connectedToInternet" gefunden wurde, stürzt es ab.

So müssen Sie Referenz erstellte Objekt von „downloadThumbnail“ passieren, Code wird wie folgt aussehen

[[NSNotificationCenter defaultCenter] addObserver:downloadThumbnail selector:@selector(connectedToInternet) name:NotifyInternetConnection object:nil]; 

Nun versuchen, wird es nicht :)

abstürzen Sie können auch auf diesen Link verweisen NSNotificationCenter: addObserver that is not self für weitere Details zum Übergeben eines "Selbst" als Beobachter in NSNotificationCenter.

Verwandte Themen