2013-09-21 6 views
13

bekomme ich diese Warnung in meinem iOS-Projekt: (iOS7, XCode 5 GM)Cryptic Warnung ohne Ergebnisse google [In Simulator]

Achtung: Nicht imstande, Wiederherstellung im Gange Marker-Datei zu erstellen

Ich arbeite an einem Viewcontroller, der schwarz wird, wenn ich diese Warnung beim Start bekomme. Das Löschen der App und das Neustarten von XCode scheint manchmal zu helfen. Ich gebe NO auf beide

Update1: Ich habe auf iPhone4s getestet. Gleiches Ergebnis. Warnung und schwarzer Bildschirm auf meinem View-Controller.

Update2: beantwortete meine eigene Frage für den schwarzen Bildschirm. Die Warnung ist in den neuesten Versionen von iOS 7.0.x verschwunden.

+0

Ich bekomme diese Warnung auch, nicht sicher, was die Ursache ist –

+0

Wie werden Ihre View-Controller erstellt? Sind sie in einem Storyboard oder Nibs oder in Ihrem App-Delegat erstellt, oder ... – Greg

+0

Ich verwende Storyboard mit Navigation View-Controller als Basis. Ich versuche, staatliche Restaurierung zu integrieren. Diese Nachricht wird auch bei Neustarts der App angezeigt (gelöscht und erneut bereitgestellt). –

Antwort

1

Ich habe nicht gefunden, warum diese Nachricht in der Konsole gedruckt wird, aber ich denke, es ist eine Art von Fehlern in iOS ist. Mit den neuesten iOS 7-Updates bekomme ich keine "Warnung: Wiederherstellung in Fortschrittsmarkerdatei kann nicht mehr erstellt werden".

Der interessantere Teil ist der schwarze Bildschirm. Es passiert, wenn Sie einen normalen ViewController und eine TableView innerhalb haben. Ich musste ZWEI Steckdosen zwischen View-Eigenschaft des ViewController und der Basisansicht erstellen (außer der Tabellenansicht gibt es mehr Ansichten, das ist der Grund, warum ich einen generischen View-Controller verwenden musste). Es gibt eine Verbindung automatisch mit jedem ViewController, das war wirklich seltsam. Ich nehme an, es ist wieder eine Art iOS Bug.

3

Stellen Sie sicher, dass Sie in Ihrer Storyboard-Datei einen View-Controller als initialen View-Controller festlegen. Sie finden diese Einstellung im Attribute-Inspector.

Attributes inspector of main scene in storyboard

UPDATE

Es klingt wie Sie nicht eine Restauration ID an die Navigationssteuerung selbst hinzugefügt haben, können Sie die Wiederherstellung IDs auf Kinder View-Controller gesetzt, sondern haben. Wenn dies der Fall ist, sollten Sie die Wiederherstellungs-ID zu den fehlenden Controllern hinzufügen.

The State Preservation and Restoration Guide

+0

Ich habe das getan. Sonst bekomme ich die ganze Zeit einen schwarzen Bildschirm. Ich bekomme es nur, wenn ich modal ein bestimmtes zeige. –

+0

Ich habe nur einen NavController als meine Basis und ich habe seine Wiederherstellungs-ID festgelegt. http://img13.imageshack.us/img13/4611/amtw.png –

+2

@EvgeniPetrov - Sind die Wiederherstellungs-IDs für die Tabellenansicht und andere Ansichten, die zusätzlich zur Controller-Ebene wiederhergestellt werden sollen, vorhanden? Dieser Blog ist ein gutes Beispiel für die Dekonstruktion eines Beispiels (http://useyourloaf.com/blog/2013/05/21/state-preservation-and-restoration.html) –

1

die

UIViewControllerRestoration

es für mich gelöst Hinzufügen. Wenn Sie auf dem Protokollverweis klicken, sagt es:

// 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 

In der Dokumentation geschrieben steht:

Eine Restaurierung Klasse implementiert das UIViewControllerRestoration Protokoll und ist verantwortlich für die Suche oder ein bestimmtes Objekt erstellen zu Zeit wiederherstellen.Hier sind einige Tipps, wann Sie diese verwenden sollten:

1) Wenn der View-Controller beim Start immer aus der Haupt-Storyboard-Datei Ihrer App geladen wird, sollten Sie keine Wiederherstellungsklasse zuweisen. Lassen Sie Ihren App-Delegierten stattdessen das Objekt finden oder nutzen Sie die UIKit-Unterstützung von , um implizit wiederhergestellte Objekte zu finden.

2) Für Ansicht Controller, die nicht von Ihrer Haupt-Storyboard-Datei unter Startzeit geladen werden, weisen Sie eine Wiederherstellungsklasse zu. Die einfachste Option ist , um jedem View-Controller eine eigene Wiederherstellungsklasse zuzuordnen.

Bisher habe ich es so verstanden. Ohne das UIViewControllerRestoration-Protokoll ist appDelegate nicht die Wiederherstellungsklasse (1). Die Warnung wird daher beim Start der App (Wiederherstellungszeit) geschrieben. Der Anwendungsdelegat kann das Objekt, das der Markierungsdatei zugewiesen werden muss, nicht finden. Das Problem ist in der AppDelegate. Wenn der App-Delegat zur Wiederherstellungs-Klasse wird, überspringt er Schritt 1) ​​und geht zu Schritt 2). Es scheint, dass das appDelegate die restorationClass für alle anderen Ansichten wird. Die folgende Methode:

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

wird nie in meiner App aufgerufen und die Wiederherstellung funktioniert ohne Warnungen oder Fehler.

Ich würde gerne das Problem verstehen und was los ist. Ich hoffe, das hilft Ihnen, und Kommentare sind willkommen, um das Problem zu klären. :)