2013-09-21 14 views
13

ottengo questo avvertimento nel mio progetto iOS: (iOS7, XCode 5 GM)avvertimento Cryptic senza risultati di Google [simulatore]

Avviso: impossibile creare restauro nel file di marcatore progresso

Sto lavorando su un viewcontroller che diventa tutto nero quando ottengo questo avviso all'avvio. L'eliminazione dell'app e il riavvio di XCode a volte sembrano aiutare. Sto restituendo NO su entrambi

-(BOOL)application:(UIApplication *)application shouldRestoreApplicationState: 
-(BOOL)application:(UIApplication *)application shouldSaveApplicationState: 

Update1: ho provato su iPhone4s. Stesso risultato Avviso e schermata nera sul mio controller di visualizzazione.

Update2: Ho risposto alla mia domanda per lo schermo nero. L'avviso è appena scomparso nelle ultime versioni di iOS 7.0.x.

+0

Ricevo anche questo avviso, non so quale sia la causa –

+0

Come vengono creati i controller di visualizzazione? Sono in uno storyboard, o nibs, o creati all'interno del tuo delegato dell'app, o ... – Greg

+0

Sto usando storyboard con controller di navigazione come base. Sto cercando di integrare il ripristino dello stato. Questo messaggio appare anche durante le nuove partenze dell'app (cancellato e distribuito nuovamente). –

risposta

1

non ho trovato il motivo per cui questo messaggio viene stampato nella console, ma penso che sia stata una sorta di bug in iOS. Con gli ultimi aggiornamenti di iOS 7 non ricevo più "Avviso: impossibile creare il file marker di avanzamento in corso".

La parte più interessante è lo schermo nero. Accade quando si dispone di un normale ViewController e un TableView all'interno di. Ho dovuto creare due uscite tra la proprietà view di ViewController e la vista di base (eccetto la vista tabella ci sono più viste, questa è la ragione per cui ho dovuto usare un controller di visualizzazione generico). C'è una connessione automaticamente con ogni ViewController, quindi è stato davvero strano. Presumo che sia di nuovo una specie di bug di iOS.

3

Assicurati di impostare un controller di visualizzazione come controller di visualizzazione iniziale nel file storyboard. Troverai questa impostazione nell'ispettore attributi.

Attributes inspector of main scene in storyboard

UPDATE

Sembra che tu non puoi aver aggiunto un ID restauro per il controller di navigazione in sé, ma invece potrebbe essere impostare gli ID di restauro sul controller di vista del bambino. In tal caso, è necessario aggiungere l'id di ripristino ai controller mancanti.

The State Preservation and Restoration Guide

+0

Ho fatto questo. Altrimenti otterrò schermo nero tutto il tempo. L'ho capito solo quando mostro uno specifico modally. –

+0

Ho solo un NavController come base e ho impostato il suo ID di ripristino. http://img13.imageshack.us/img13/4611/amtw.png –

+2

@EvgeniPetrov - Gli ID di ripristino sono posizionati per la vista tabella e altre viste che si desidera ripristinare oltre al livello di controller? Questo blog è un buon esempio di decostruzione di un campione (http://useyourloaf.com/blog/2013/05/21/state-preservation-and-restoration.html) –

1

Aggiunta del

UIViewControllerRestoration

risolto per me. Se si fa clic sul riferimento protocollo che dice:

// A class must implement this protocol if it is specified as the restoration class of a UIViewController. 


@import UIKit; 

@interface AppDelegate : UIResponder <UIApplicationDelegate, UIViewControllerRestoration> 

@property (strong, nonatomic) UIWindow *window; 

@end 

nella documentazione è scritto:

Una classe di restauro implementa il protocollo UIViewControllerRestoration ed è responsabile per la ricerca e la creazione di un designato oggetto in ripristinare il tempo.Ecco alcuni suggerimenti su quando utilizzarli:

1) Se il controller di visualizzazione è sempre caricato dal file di storyboard principale della tua app in fase di avvio, non assegnare una classe di ripristino. Invece, lascia che l'app delegata trovi l'oggetto o sfrutti il ​​supporto di UIKit per trovare implicitamente oggetti ripristinati.

2) Per visualizzare i controller che non sono stati caricati dal file di storyboard principale al momento di avvio , assegnare una classe di ripristino. L'opzione più semplice è rendere ogni controller di visualizzazione la propria classe di ripristino.

Finora l'ho capito in questo modo. Senza il protocollo UIViewControllerRestoration l'appDelegate non è la classe di ripristino (1). L'avviso è quindi scritto all'avvio dell'app (tempo di ripristino). Il delegato dell'app non può in qualche modo trovare l'oggetto che deve essere assegnato al file marker. Il problema è nell'appDelegate. Quando il delegato dell'app diventa RestoreClass salta il passaggio 1) e passa al punto 2). Sembra che l'appDelegate diventi la classe di ripristino principale per tutte le altre visualizzazioni. Il seguente metodo:

+ (UIViewController*) viewControllerWithRestorationIdentifierPath:(NSArray *)identifierComponents 
                  coder:(NSCoder *)coder {} 

non viene mai chiamato nella mia app e il ripristino funziona senza errori o errori.

Mi piacerebbe capire il problema e cosa sta succedendo. Spero che questo ti aiuti, e i commenti sono invitati a chiarire il problema. :)

Problemi correlati