2012-11-11 7 views

Antwort

0

Nein, es gibt keine Möglichkeit, um eine iOS-Anwendung programmgesteuert neu zu starten. Der Lebenszyklus der Anwendung wird vom Betriebssystem gesteuert.

5

Hinweis:

Obwohl diese wurde nach unten gestimmt Ich denke, es ist ein vollkommen gültig ist Frage nach einem neuen iOS-Entwickler zu fragen. Es gibt eine Möglichkeit, Ihre App aus der Benutzerperspektive neu zu starten, die nicht technisch Neustart oder Beenden der iOS App ist. Wie in anderen Antworten erwähnt, sollte eine iOS App niemals explizit beendet werden, da dies unter iOS nicht erlaubt ist.

Meine Antwort:

Wenn Sie Ihre App wollen den Staat es in am Start war um zurück zu gehen diese nicht zu 100% möglich ist, aber ich werde einen Weg erklären es die meisten der Weg zu bekommen, dass sollte für alle gültigen Zwecke ausreichend sein.

Das erste, was zu tun ist, ist Ihre Root-View-Controller neu zu erstellen. Ich empfehle, diese von einer Methode in der AppDelegate wie folgt aus:

- (void)resetAppToFirstController 
{ 
    self.window.rootViewController = [[MyMainViewController alloc] initWithNibName:nil bundle:nil]; 
} 

In vielen Fällen ist dies ausreichend sein wird, aber jede App-Zustand, die Sie auch bei diesem Verfahren zurückgesetzt werden sollte. Zum Beispiel loggen Sie sich einen Benutzer aus, setzen Sie einen nicht-persistenten Zustand zurück und löschen Sie alle Objekte, die Sie können. Diese Methode kann auch verwendet werden, um zunächst Ihren ersten View-Controller von application:didFinishLaunchingWithOptions zu erstellen.

Framework-Klassen und Singletons:

Sie werden nicht vollständig den Zustand irgendwelcher Rahmen Singletons oder pro-App-Instanzen, wie diese in der Lage zurück:

[UIApplication sharedApplication]; 
[NSNotificationCenter defaultCenter]; 
[NSUserDefaults standardUserDefaults]; 
[UIScreen screens]; 
// etc... 

Das ist wahrscheinlich in Ordnung Da Sie in diesen Objekten sowieso keinen nicht persistenten Zustand speichern sollten (außer NSNotificationCenter, aber alle registrierten Beobachter sollten beim Freigeben der Objekte entfernt worden sein). Wenn Sie einen Framework-Status initialisieren oder zurücksetzen möchten, können Sie dies in der gleichen resetAppToFirstController Methode tun. Auf jeden Fall sollte es nicht notwendig sein, diese oder das window Objekt neu zu erstellen.

Wenn Sie eigene Singletons haben, können Sie diese neu erstellen, indem Sie sie in einer Singleton-Halter-Klasse speichern (die selbst ein echter Singleton ist). Konzeptionell ist dies eine einfache Singleton-Klasse mit Eigenschaften für jedes Ihrer anderen Singletons und eine reset-Methode, um alle zu annullieren und freizugeben. Ihre anderen Singletons sollten diese Klasse (anstelle einer statischen oder globalen Variablen) verwenden, um Singleton-Instanzen zu speichern. Seien Sie vorsichtig, wenn Sie Bibliotheken von Drittanbietern verwenden, da diese auch Singletons verwenden können. Sie müssen sicherstellen, dass diese auch Ihren Singleton-Halter verwenden, damit Sie sie nach Bedarf zurücksetzen können. Ich denke, diese Technik ist sowieso eine gute Methode, denn in manchen Fällen (zum Beispiel beim Komponententest) wollen Sie, dass Objekte, die normalerweise Singletons sind, verschwinden und in einen ursprünglichen Zustand reinitialisieren.Allerdings möchten Sie die Singleton-Implementierungen nicht mit Ihrem Singleton-Halter verbinden. Eine gute Möglichkeit, dies zu implementieren, ist die Verwendung eines NSMutableDictionary als zugehöriges Objekt unter [UIApplication sharedApplication] mit den Singleton-Klassennamen als Schlüssel. Allerdings gehe ich ein wenig vom Thema ab, da dies eine fortgeschrittene Technik ist, die über den Rahmen dieser Frage hinausgeht.


Das oben Genannte sollte ausreichen, um Ihre Anwendung "zurückzusetzen", soweit es den Benutzer betrifft. Sie können den Begrüßungsbildschirm sogar erneut anzeigen, wenn Sie als erster View-Controller arbeiten möchten.

+0

http://stackoverflow.com/a/30647435/793880 an –

Verwandte Themen