2010-06-23 7 views
8

Ich habe gerade das iPhone SDK 4 und ich versuche, die Entwicklung einer App, an der ich gearbeitet habe, zu beenden. So implementiert ich sowohl -(void)applicationDidEnterBackground:(UIApplication *)application und - (void)applicationWillTerminate:(UIApplication *)applicationiPhone App läuft Simulator 4.0 erhalten Sigkill

Wenn ich die Home-Taste in dem 4.0-Simulator klicken, scheint es in Ordnung zu arbeiten. Die App ruft -(void)applicationDidEnterBackground:(UIApplication *)application auf und tritt in den Hintergrundzustand ein.

Allerdings klicke ich dann doppelt auf die Home-Taste, um die im Hintergrund laufende App anzuzeigen, und halte sie gedrückt, um das Minuszeichen anzuzeigen oder zu beenden. Wenn ich auf das Minuszeichen klicken, sagt die Debugger

Programmsignal empfangen: "SIGKILL"

zusätzlich wird - (void)applicationWillTerminate:(UIApplication *)application nie genannt. Fehle ich etwas, was ich tun muss, damit OS4 funktioniert? Oder zumindest kann mir jemand eine Möglichkeit geben, SIGKILL zu debuggen. Vielen Dank.

Antwort

13

-applicationWillTerminate: wird nur aufgerufen, wenn Ihre Anwendung ausgeführt wird, wenn sie zum Beenden aufgefordert wird. Wenn es sich bereits in einem suspendierten Zustand befindet (wie Sie es hier haben), sendet das System einfach ein Kill-Signal an die Anwendung. Dies geschieht, wenn der Benutzer die roten Minus-Tasten drückt, um die App manuell zu beenden, und wenn das System beschließt, die App auszuwerfen, um Speicher für die Vordergrundanwendung freizugeben.

Wenn Ihre Anwendung im Hintergrund läuft (z. B. Musik spielt oder einige Hintergrundaufgaben ausführt) und der Benutzer die Anwendung manuell durch Drücken der Minus-Taste beendet, erhalten Sie nur eine -applicationWillTerminate: Nachricht. Daher müssen Sie alle Ihren Status/etc speichern. bevor Sie von -applicationDidEnterBackground: zurückkehren.

+0

Danke für die Antwort. Das macht Sinn. Ich habe jedoch auch ein anderes Problem. Wenn -applicationDidEnterBackground: aufgerufen wird, versuche ich den Status der App mit NSUserDefaults zu speichern, aber aus irgendeinem Grund sind meine Werte nicht das, was ich erwarte, wenn die App neu gestartet wird. Irgendwelche Gründe, warum das in OS4 nicht funktionieren würde? – NickDK

+0

Nevermind ... Ich rief nicht auf NSUserdefaults synchronisieren. – NickDK

2

Dies ist zu erwarten, dass die Multitasking-Leiste "red close button" ist das Äquivalent der Kraft, eine Anwendung auf Mac OS X zu beenden. Dies ist das dokumentierte Verhalten. Apple erwartet, dass normale Benutzer von iOS 4 Anwendungen einfach starten/verwenden/dimmen, die sie nicht in Bezug auf Beendigungsprozesse oder irgendetwas anderes denken müssen. Das System wird das schaffen.

Stellen Sie sicher, dass alle wichtigen Daten in der Anwendung gespeichert werden: willResignActive: oder applicationWillEnterBackground. Denn danach kann es passieren, dass Sie getötet werden, wenn der Speicherdruck das System zur Bereinigung zwingt ... Snow Leopard führte ein ähnliches Verhalten für Apps ein, die den Schlüssel NSSupportsSuddenTermination in ihrer Info.plist verwenden. Eine App teilt dem System grundsätzlich mit, dass es seine Daten nach und nach speichert, so dass im Hintergrund nichts mehr zu tun ist. Im Gegensatz zu großen monolithischen Apps Desktop-Apps ...