2012-11-13 9 views
11

Hi Ich bin bei der Entwicklung einer Storyboard-App auf seltsame Dinge gestoßen.Fehlender Proxy für Bezeichner UIStoryboardPlaceholder

Meine App direkt nach dem Startbildschirm angehalten und in der Konsole erhalte ich Fehlermeldung:

Missing proxy for identifier UIStoryboardPlaceholder 

Nun, wenn ich versuche, die App zu lassen weiterlaufen, erhalte ich neue Nachrichten in der Konsole, die ich glaube, ist im Zusammenhang mit der Tatsache, dass es etwas falsch mit der ersten Fehlermeldung

*** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: 
'[<IntroViewController 0x6e35f40> setValue:forUndefinedKey:]: 
this class is not key value coding-compliant for the key sceneViewController. 

ist, was ich nur bekomme diese Fehler seltsam ist, wenn sie mit iOS 5.1 Simulator arbeiten. Es funktioniert gut auf iOS-6-Simulator und auch auf Geräten mit iOS 6 und iOS 5.1

Ich habe versucht, eine Antwort zu finden, aber Google sagt, es konnte keine Ergebnisse für das Wort UIStoryboardPlaceholder finden, geschweige denn die ganze Fehlermeldung. Ich habe sichergestellt, dass ich das Wort "UIStoryboardPlaceholder" nirgends in meinem xcode-Projekt (nicht einmal in NIB-Dateien) habe und auch nirgends "sceneViewController" erwähnt werde. Irgendeine Idee, was könnte falsch sein?

EDIT: Ich habe versucht, Simulator und Reinigungs Projekt zurückgesetzt, aber

+0

Ich habe den gleichen Absturz auf iOS 7-Gerät. Es wird gestartet, wenn ich eine Wiederherstellungs-ID einem Storyboard-Ansichtscontroller (einer Registerkarte eines Stammregisterkartencontrollers) zuweisen, der seine Ansicht in einer separaten Xib hat. Wenn ich die Ansicht auf das Storyboard verschiebe, ist alles in Ordnung. –

Antwort

6

Ich hatte das gleiche Problem ohne Erfolg. Versuchen Sie, das Projekt zu säubern und den Simulator wiederherzustellen.

+1

danke für deine antwort. Leider habe ich das versucht und es hat nicht geholfen. – Lukas1

1

Fügen Sie mich der Liste hinzu. Ich erhalte diesen Fehler nach "Refactoring - Umbenennen" in einer Klasse. Die Klasse, die ich umbenenne, ist ein benutzerdefinierter ViewController mit einer eigenen .xib. Ich benutze Storyboard, das einen ViewController startet, der eine "Containeransicht" enthält, in die beim Start der ViewController eingebaut ist.

Der einzige Ausweg daraus ist, meine refaktorierte .xib NICHT zu verwenden (sie von der Containeransicht zu trennen).

Meine Semi-Lösung:
Ich habe meine App von einem früheren Arbeits Snapshot wiederhergestellt und einen neuen benutzerdefinierten ViewController und .xib von Grund auf statt Refactoring erstellt. Verbunden mit Storyboard und ich habe die Fehlermeldung erneut erhalten. Bereinigt den Build und löschte die App aus dem Simulator und lief erneut, und dann lief es magisch ohne Fehler. Aus diesem Grund glaube ich, dass es einen Fehler in Xcode mit Refactor-Rename gibt, der einige Storyboard-Dateien hinter den Kulissen verdirbt. Nachdem ich bestätigt habe, dass die neue .xib fehlerfrei an das Storyboard angehängt wurde, habe ich den Klassencode in die neue benutzerdefinierte viewController-Klasse kopiert und eingefügt und die Klassenobjekte wie erwartet erneut an die .xib-Datei angeschlossen . Lief es und alles hat noch funktioniert.

FYI - hier sind einige der gescheiterten Schritte, die ich in meinem Versuch unternommen habe, den Fehler zu beheben (vor dem Aufgeben und Wiederherstellen von Snapshot).
1. Reinigung Build.
2. App im iOS-Simulator löschen.
3. Löschen aller Ansichten in der benutzerdefinierten ViewController .xib.
4. Benennen Sie den benutzerdefinierten ViewController etwas anderes.
5. Fügen Sie im Storyboard dem ViewController eine leere Ansicht hinzu, die meine benutzerdefinierte Viewcontroller-Klasse darstellt. Dies funktionierte und erlaubte meiner App, auszuführen, aber meine benutzerdefinierte Klasse konnte weder eigene Ansichten anstelle dieser standardmäßigen leeren Ansicht laden, noch waren eigene Ansichten sichtbar, wenn die leere Standardansicht transparent gemacht wurde. Das Debugging hat gezeigt, dass meine benutzerdefinierten Klassen .xib-Ansichten null sind, wenn sie Self.view zugewiesen sind.

Ich vermeide derzeit Xcode Refactor-Rename für Dateien mit einer .xib.

+0

danke für Ihre Einsicht. Ich werde jetzt auch vorsichtig mit Refactoring sein. Leider kann ich nicht zu dem vorherigen Zustand zurückkehren, weil ich mich nicht daran erinnern kann, ob ich das Feature benutzt habe, und das hat das Problem verursacht und in der Zwischenzeit viele Änderungen vorgenommen. Ich teste nur auf dem echten Gerät, wo ich keine Probleme habe – Lukas1

3

Ich bekam den gleichen Fehler mit einer App, die ich von .xib-Dateien in Storyboards umwandelte. Meine App enthielt einen UITabBarController, und das Tippen auf bestimmte Registerkarten würde den Fehler auslösen.

In meinem Fall war das Problem, dass ich View-Controller in das Storyboard kopiert hatte, die die Eigenschaft "NIB-Name" verwendet, um die View-Controller-Ansicht aus einer externen XIB-Datei zu laden. Storyboard-Ansichten-Controller unterstützen das Laden von Ansichten aus .xib-Dateien nicht, sodass mein Storyboard einen Ansichtscontroller enthielt, der keine Ansicht enthielt.

Ich habe die externe .xib-Datei geöffnet, die Ansicht kopiert, sie in den entsprechenden Ansichtscontroller in meinem Storyboard eingefügt und sichergestellt, dass die eingefügte Ansicht dem Ansichtscontroller in der Storyboard-Szene untergeordnet (eingerückt) war. Dann habe ich die Ansicht wieder mit den Anschlüssen im View-Controller verbunden.

Wenn ich die Anwendung erneut ausgeführt habe, war der Fehler verschwunden.

+0

Eigentlich können Sie einen Storyboard-View-Controller mit separaten Xib für seine Ansicht haben. Benennen Sie einfach Ihre XIB-Datei mit dem Namen der View-Controller-Klasse, z. MyViewController.xib. –

+1

@vladim - ich versuche zu tun, wie Sie vorschlagen, die Docs sagen, Sie können, aber das ist, was diesen Fehler verursacht. – hooleyhoop

0

Ich hatte die gleichen Fehler, endlich löste es. Mein Problem war, dass ich hatte:

[[storyboard instantiateViewControllerWithIdentifier:@"TripDetail"] methodThatDoesNotExist:@"param"] 
20

Wir hatten das gleiche Problem: ein View-Controller in einer Storyboard-Datei mit seiner Schnittstelle in einer separaten XIB-Datei definiert. (Mit Xcode 6.3.1, iOS 8.3 und Swift 1.2.)

Wir verwenden Swift so hatten wir die @objc() Erklärung der Klassendeklaration hinzugefügt:

@objc(TestViewController) class TestViewController: UIViewController 

Wir konnten den View-Controller instanziiert gerade gut von einem anderen View-Controller mit self.storyboard?.instantiateViewControllerWithIdentifier("TestViewController"), aber beim Präsentieren der View-Controller (mit self.presentViewController(viewController, animated: true, completion: nil)) stürzte die App mit dem gleichen "fehlenden Proxy" und "nicht Schlüsselwert Kodierung-konform für den Schlüssel sceneViewController" Fehler.

Unsere Lösung, die wir nach dem sehr frustriert trial-and-error-wie Debugging sicher, dass der View-Controller des Storyboard-ID in der Storyboard-Datei machen war einfach zu finden ist nicht die gleiche wie der Klassenname.

Wenn wir die Storyboard-ID von „TestViewController“ auf „testViewController“ (einzige Unterschied ist die Kleinanfangsbuchstaben) umbenannt, alles funktionierte ...

Seltsam? Du wette, aber alles scheint jetzt zu funktionieren.

+0

Ich denke, die Idee "stellen Sie sicher, dass die Storyboard-ID des View-Controllers in der Storyboard-Datei nicht mit dem Klassennamen identisch ist" ist greate :). –

+0

Es funktioniert auch für mich! Habe meine Nerven gerettet, vielen Dank! –

+0

großartige Lösung, danke! Offensichtlich ist es ein Apples fuck up – iago849