2015-08-03 9 views
6

In IOS 9 der folgenden Code bezeichnete eine Benachrichtigung zum Erfassen nicht die Wahlverfahren ausgelöst. In früheren Versionen (z. B. 8.4) läuft es gut. Weiß jemand warum?IOS 9 UIApplicationDidBecomeActiveNotification Rückruf nicht

[[NSNotificationCenter defaultCenter]addObserver:self 
             selector:@selector(yourMethod) 
              name:UIApplicationDidBecomeActiveNotification 
              object:nil]; 

- (void)yourMethod {NSLog(@"aaaaaaa");} 
+0

Da iOS 9 in der Betaversion ist, erhalten Sie möglicherweise eine bessere Antwort auf Apples Entwicklerforen. –

Antwort

-1

Ich mache Benachrichtigung registrieren so.

[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(yourMethod:) name:UIApplicationDidBecomeActiveNotification object:nil]; 

Schreiben Methode wie das.

Auch müssen Sie NSLog in AppDelegate.m und sehen Sie sich in der Konsole anmelden.

-(void)applicationDidBecomeActive:(UIApplication *)application{ 
     NSLog(@"applicationDidBecomeActive"); 
} 
+0

Dies tut nichts mehr als das Problem zu beheben –

+0

Sie können Art von sagen. Aber er sagte ihm sogar, wie man nachforschen kann. –

2

Während einige Tests machen, ich stellte fest, dass die Benachrichtigung tatsächlich ausgelöst wird, wenn auch nicht zur Startzeit (oder zumindest zu früh von Ihrem Beobachter gefangen werden) (auf dem Simulator nur).

Versuchen Sie das Notification Center nach unten und nach oben oder dem Kontrollzentrum nach oben und unten ziehen, und Sie werden Ihre Methode sehen tatsächlich aufgerufen werden.

Ich würde vorschlagen, vielleicht Ihre Methode aufrufen manuell auf iOS 9, wenn die App startet?

Auf einem realen Gerät wird das Verfahren ebenso auf iOS 8.

bearbeiten genannt: nach einer weiteren Untersuchung, so scheint es, daß die Anmeldung auf Geräte jedes Mal eigentlich nicht ausgelöst:/

3

Ich hatte das gleiche Problem und für mich funktionierte es, den addObserver-Code auf watchFromNib zu verschieben. Eine andere Lösung könnte eine Verzögerung der addObserver wie in dem Beispiel hinzuzufügen sein unter:

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ 
     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidBecomeActive) name:UIApplicationDidBecomeActiveNotification object:nil]; 
}); 
0

ich auch in dieses Problem gestoßen haben und das Hinzufügen der Beobachter mit einer Verzögerung löste es nicht in meinem Fall. Managed loswerden es durch die Methode direkt in AppDelegate Aufruf und von der Haupt Warteschlange, ohne Verzögerung.

Swift:

func applicationDidBecomeActive(application: UIApplication) { 

    dispatch_async(dispatch_get_main_queue()) {() -> Void in 

     yourMethod() 
    } 
} 
6

Dieser Link wie unten vielleicht Ihr Problem helfen.

Foundation Release Notes for OS X v10.11

Use "addObserverForName" statt "addObserver".

[[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationDidBecomeActiveNotification 
                 object:nil 
                 queue:[NSOperationQueue mainQueue] 
                usingBlock:^(NSNotification * Nonnull note) { 
                 [self yourMethod]; 
                }]; 

Es wird funktionieren.

+0

Wenn Sie 'addObserver:' verwenden möchten, muss Ihre App über einige Benutzeroberflächeninhalte verfügen, die 'NSNotificationCenter' verwenden. – jypark

+0

Sie haben Recht, vielen Dank. – Jerome

0

hatte ich genau das gleiche Problem nur auf realen Geräten iOS 9.0 oder höher ausgeführt wird.

endete ich meine eigene Meldung auf der Definition:

#define myAppBecameActiveNotif @"Tito, your app is active" 

Dann in Ihrer AppDelegate Implementierung (AppDelegate.m den meisten Fällen) Sie implementieren applicationDidBecomeActive (dies sollte global verfügbar, constants.h oder gleich definieren sein) Delegatmethode:

- (void)applicationDidBecomeActive:(UIApplication *)application { 
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ 
     [[NSNotificationCenter defaultCenter] postNotificationName:myAppBecameActiveNotif 
                  object:nil]; 
    }); 
} 

(nur verzögern den Versand Ihrer Anmeldung ein wenig, Ihre Komponenten kommen zum Leben lassen)

nun in der Klasse möchten Sie die App, die Sie jetzt

[[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(whatToDoWhenAppActive:) 
               name:myAppBecameActiveNotif 
               object:nil]; 

Arbeiten gut tun aktiv wurde benachrichtigt werden. Sie werden sehen, dass Sie diese Verzögerung von 500 ms nicht fühlen können ...