Wie behandeln UIApplicationWillTerminateNotification IOS4?
IOS4 bin ich der Registrierung folgende Meldung:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(appWillTerminate:)
name:UIApplicationWillTerminateNotification
object:[UIApplication sharedApplication]];
-(void)appWillTerminate:(UIApplication *) app {
NSLog(@"terminate");
}
Weiß ich, dass dies nicht genannt, in allen Situationen wie in der vorherigen iOS-Versionen, jedoch einfach durch die Erfassung bekomme ich eine EXC_BAD_ACCESSS
wenn die app beendet wird. Trotzdem kann ich nicht entfernen weil mein app unterstützt iOS3.0+. Wie kann ich das umgehen?
UPDATE: Hier ist der crash-log:
Exception Type: EXC_BAD_ACCESS (SIGBUS)
Exception Codes: KERN_PROTECTION_FAILURE at 0x00000011
Crashed Thread: 0
Thread 0 Crashed:
0 libobjc.A.dylib 0x0000441c objc_msgSend + 20
1 Foundation 0x00015432 _nsnote_callback + 150
2 CoreFoundation 0x000271da __CFXNotificationPost_old + 390
3 CoreFoundation 0x00026e7a _CFXNotificationPostNotification + 122
4 Foundation 0x00004720 -[NSNotificationCenter postNotificationName:object:userInfo:] + 64
5 Foundation 0x0000de3a -[NSNotificationCenter postNotificationName:object:] + 14
6 UIKit 0x000bef10 -[UIApplication _terminateWithStatus:] + 164
7 UIKit 0x000be1b0 -[UIApplication _handleApplicationSuspend:eventInfo:] + 1980
8 UIKit 0x0007e4a0 -[UIApplication handleEvent:withNewEvent:] + 3620
9 UIKit 0x0007d470 -[UIApplication sendEvent:] + 60
10 UIKit 0x0007ccf8 _UIApplicationHandleEvent + 6804
11 GraphicsServices 0x00005dd8 PurpleEventCallback + 1024
12 CoreFoundation 0x00035e40 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 22
13 CoreFoundation 0x00035dfe __CFRunLoopDoSource1 + 158
14 CoreFoundation 0x0002809e __CFRunLoopRun + 574
15 CoreFoundation 0x00027d74 CFRunLoopRunSpecific + 220
16 CoreFoundation 0x00027c82 CFRunLoopRunInMode + 54
17 GraphicsServices 0x00004e84 GSEventRunModal + 188
18 UIKit 0x00004f8c -[UIApplication _run] + 564
19 UIKit 0x000024cc UIApplicationMain + 964
Die EXC_BAD_ACCESS ist wahrscheinlich in keinem Zusammenhang. Ich glaube nicht, dass
Seltsam genug, entfernte ich den ganzen code in
UIApplicationWillTerminateNotification
ist immer gesendet, der auf Geräten mit Unterstützung für mustitasking. Haben Sie irgendeinen code in applicationWillEnterBackground:
oder die entsprechende Benachrichtigung?Seltsam genug, entfernte ich den ganzen code in
applicationWillEnterBackground
und immer noch das gleiche passiert, oben auf, dass, wenn ich entfernen Sie die Benachrichtigung für UIApplicationWillTerminateNotification
alle funktioniert. Auch dies geschieht nur auf dem Gerät, nicht auf den simulator. Wird die update-Frage mit den crash-log.InformationsquelleAutor Valentin Radu | 2011-06-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Stellen Sie sicher, dass Sie entfernen Sie den Betrachter in jede Klasse, die das Zuhören für das terminate-notification. Wenn Sie nicht entfernen Sie die Meldung es wird versucht, eine Nachricht an ein Objekt freigegeben werden und dann die Anwendung abstürzt. Sollten Sie nicht abstürzt, für das hören auf eine Benachrichtigung, die nicht existieren, es wäre einfach nicht aufgerufen.
UIApplicationWillTerminateNotification
Benachrichtigung. Sollte ich es in eine andere Klasse?Ich fügte hinzu, die nennen, die ich brauchte in der Anwendung Delegieren und arbeitete. Vielen Dank für die Hilfe.
Ja, dass ist der Ort für es, und es unterstützt bereits die Methode, ohne dass eine Benachrichtigung hinzufügen Beobachter.
InformationsquelleAutor Joe
Was Sie tun können, ist der Nachweis der iOS-version, und wenn v. 3.0, dann verwenden Sie appWillTerminate und wenn Ihr v. 4.0 verwenden appWillResignActive oder appDidEnterBackground, Beispiel:
InformationsquelleAutor Chance Hudson
Ersten argument übergeben Sie Ihre
appWillTerminate:
Methode wird einNSNotification
Objekt, nicht auf IhrUIApplication
. Sehen die NSNotificationCenter Klasse ReferenzInformationsquelleAutor Jim