2015-07-29 15 views
7

Attualmente, quando cambio le autorizzazioni della videocamera per la mia app in Impostazioni, quindi torno alla mia app, l'app forzerà un aggiornamento e perderò il mio posto nell'app. Seguo questi passaggi esattamente:Come posso impedire il ripristino delle app iOS dopo aver cambiato le autorizzazioni della fotocamera?

  1. aprire un'applicazione che utilizza il permesso fotocamera.
  2. Passare a qualche schermata all'interno dell'applicazione (in modo da poter vedere visibilmente l'aggiornamento in seguito)
  3. Vai l'applicazione Impostazioni, spostarsi impostazioni dell'applicazione, e alternare il permesso fotocamera
  4. doppio clic casa e tornare indietro all'app. Dopo pochi secondi, si aggiorna, riportandovi alla prima schermata

Nota: sto usando un iPhone con iOS 6 8.4

ho notato questo comportamento su tutte le applicazioni che avere il permesso della fotocamera La mia domanda è: C'è qualche modo per impedire all'app di rinfrescarsi/riavviarsi (al ripristino) dopo aver cambiato il permesso della telecamera? Non sembra accadere quando si abilitano i servizi di localizzazione, ad esempio, e dal punto di vista dell'usabilità questo è orribile.

Scenario utente: se un utente si sposta in profondità nella vostra applicazione, quindi ha bisogno di cambiare il permesso fotocamera (perché dicono che accidentalmente cliccato non ultima volta), essi saranno costretti a spostarsi di nuovo a quello schermo al loro ritorno. Ciò è particolarmente dannoso per un'app che cerca di venderti qualcosa o ti iscrive per un nuovo account. Potrebbero provare a introdurre una nuova funzione in cui è possibile utilizzare la fotocamera per scattare una foto del profilo o scansionare la carta di credito. Poiché l'utente non conosceva questa funzionalità, in precedenza avrebbe potuto negare l'accesso alla videocamera, ma ora desidera attivarla. Dopo aver provato a riattivare, tornano alla tua app per scoprire che devono passare più di 5 minuti per iscriversi/effettuare un acquisto, ancora una volta! Dopo di ciò, anche io probabilmente rinuncerei.

risposta

7

Sono sicuro che non ci sono altri modi per impedire il riavvio dell'app. In realtà si otterrà un messaggio SIGKILL ma nessun registro degli arresti anomali durante la commutazione delle impostazioni. Vedi sotto Collegamenti-

L'unico modo per evitare questo scenario è quello di salvare lo stato precedente di voi applicazione durante la terminazione.

  • Store i dati correnti in un JSON/plist/NSUserDefaults/modello utente archivio al applicationWillTerminate: metodo e
  • ripristino dei dati salvati in applicationWillEnterForeground:

Per [email protected] iscriversi UIApplicationWillTerminateNotification che si attiva quando l'app sta per terminare. Memorizza le informazioni dell'utente lì.

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 
[[NSNotificationCenter defaultCenter] addObserver:self 
    selector:@selector(applicationWillTerminate:) 
    name: UIApplicationWillTerminateNotification object:nil]; 
} 

- (void)applicationWillTerminate:(NSNotification *)notification 
{ 
// store your data here 
} 

Spero che questo vi aiuterà a :)

+1

applicationWillTerminate non chiama nemmeno notifica è aggiungere in viewDidLoad come lei suggerisce in modo che qualsiasi idea di questo? mi aiuti per favore. –

1

La risposta accettata è corretta, ma la soluzione non sembra lavorare nella versione attuale di iOS (9.2) - l'applicazione sembra terminare prima UIApplicationWillTerminateNotification è licenziato. Tuttavia ascoltando UIApplicationDidEnterBackgroundNotification, lo stesso può essere ottenuto. per esempio in Swift, mettere questo in viewDidLoad()

NSNotificationCenter.defaultCenter().addObserver(self, selector: "enteringBackground:", name: UIApplicationDidEnterBackgroundNotification, object: nil) 

e hanno una funzione come questa:

func enteringBackground(sender:AnyObject){ 
    // Save application state here 
} 
+0

che è utile. potresti inserire anche il codice di stato di salvataggio/ripristino in quella risposta? –