2012-11-11 12 views

Odpowiedz

0

Nie, nie ma sposobu, aby programowo uruchomić ponownie aplikację na iOS. Cykl życia aplikacji jest kontrolowany przez system operacyjny.

5

Uwaga:

Chociaż ta została dół głosowali myślę, że jest to ważna kwestia dla zupełnie nowego iOS dewelopera zapytać. Istnieje sposób "ponownego uruchomienia" aplikacji z perspektywy użytkownika, która nie jest technicznie ponownie uruchamiana lub zamykana w aplikacji na iOS. Jak wskazano w innych odpowiedziach, aplikacja na iOS nigdy nie powinna zostać wyraźnie zamknięta, ponieważ nie jest to dozwolone w systemie iOS.

Moja odpowiedź:

Jeśli chcesz swoją aplikację, aby powrócić do stanu, w jakim znajdował się w chwili premiery nie jest to w 100% możliwe, ale opiszę sposób, aby uzyskać większość drogi tam, że powinny wystarczające dla wszystkich ważnych celów.

Pierwszą rzeczą do zrobienia jest ponowne utworzenie kontrolera widoku głównego. Polecam ten sposób z metody w delegata aplikacji tak:

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

W wielu przypadkach będzie to mało, ale każda aplikacja-państwo, które masz powinny być zresetowane w ten sposób również. Na przykład wyloguj użytkownika, zresetuj dowolny nietrwały stan i unieważnij (zwolnij) wszystkie obiekty, które możesz. Ta metoda może być również używana do początkowego utworzenia pierwszego kontrolera widoku od application:didFinishLaunchingWithOptions.

klas ramowe i Singletons:

nie będziesz w stanie całkowicie zresetować stan żadnej singletons ramowych lub per-app przypadkach, takich jak te:

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

to chyba w porządku ponieważ nie powinieneś przechowywać w nich żadnego stanu nieustalonego (z wyjątkiem NSNotificationCenter, ale wszystkie zarejestrowane obserwatory powinny zostać usunięte, gdy obiekty zostały zwolnione). Jeśli chcesz zainicjować lub zresetować dowolny stan struktury, możesz to zrobić w tej samej metodzie resetAppToFirstController. W każdym razie nie powinno być potrzeby ponownego tworzenia tych obiektów ani obiektów window.

Jeśli posiadasz własne singletony, możesz je odtworzyć, przechowując je w klasie singleton-holder (która sama jest prawdziwym singletonem). Konceptualnie jest to prosta klasa singleton z właściwościami dla każdego z twoich innych singletonów i metodą reset unieważniania i uwalniania ich wszystkich. Twoje inne singletony powinny używać tej klasy (zamiast zmiennej statycznej lub globalnej) do przechowywania pojedynczych instancji. Zachowaj ostrożność, jeśli korzystasz z bibliotek stron trzecich, ponieważ mogą one również korzystać z singletonów i musisz upewnić się, że używają one także jednego singleton-holder, dzięki czemu możesz je zresetować w razie potrzeby. Sądzę, że ta technika i tak jest dobrą praktyką, ponieważ w niektórych przypadkach (na przykład testowanie jednostkowe) chcesz, aby obiekty, które zwykle są singletonami, odchodzą i reinicjują do nieskazitelnego stanu.Jednak nie chcesz łączyć implementacji singleton ze swoim singleton-holder, więc dobrym sposobem na jego implementację jest użycie obiektu NSMutableDictionary jako obiektu powiązanego pod numerem [UIApplication sharedApplication] z nazwami klas singleton jako kluczami. Jednak wychodzę trochę z tematu, ponieważ jest to bardziej zaawansowana technika wykraczająca poza zakres tego pytania.


Powyższe powinno wystarczyć do "zresetowania" aplikacji w odniesieniu do użytkownika. Możesz nawet ponownie wyświetlić ekran powitalny, jeśli chcesz jako pierwszy kontroler widoku.

+0

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

Powiązane problemy