2012-11-13 16 views
11

Hi, mi sembra di essere incappato in qualcosa di strano mentre sviluppavo un'app storyboard.Proxy mancante per identificatore UIStoryboardPlaceholder

mia app viene fermato subito dopo lo splash screen e in consolle ottengo messaggio di errore:

Missing proxy for identifier UIStoryboardPlaceholder 

Ora, se cerco di lasciare che l'applicazione continuerà a funzionare, ho nuovi messaggi in console, che ritengo legato al fatto, che c'è qualcosa di sbagliato con il primo messaggio di errore

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

che è strano ottengo solo questo errore quando si lavora con iOS 5.1 Simulator. Funziona perfettamente con il simulatore di iOs 6 e anche su dispositivi con iOs 6 e iOs 5.1

Ho provato a trovare la risposta, ma Google dice che non è stato trovato alcun risultato per la parola UIStoryboardPlaceholder, per non parlare dell'intero messaggio di errore. Ho fatto in modo che non avessi la parola 'UIStoryboardPlaceholder' in nessun punto del mio progetto xcode (nemmeno nei file di pennini) e non c'è neanche menzionato 'sceneViewController'. Qualche idea di cosa potrebbe essere sbagliato?

EDIT: Ho provato a resettare il simulatore e la pulizia del progetto, ma senza alcun risultato

+0

Sto avendo lo stesso crash su dispositivo iOS 7. Inizia quando assegno un ID di ripristino a un controller di visualizzazione dello storyboard (una scheda di un controller della barra della scheda radice) che ha la sua vista in uno xib separato. Se sposto la vista nello storyboard, tutto va bene. –

risposta

6

ho avuto lo stesso problema. Prova a pulire il progetto e ripristinare il simulatore.

+1

grazie per la risposta. Purtroppo l'ho provato e non è stato d'aiuto. – Lukas1

1

Aggiungimi alla lista. Ottengo questo errore dopo "refactoring - rinomina" in una classe. La classe che sto rinominando è un ViewController personalizzato con un proprio .xib. Io uso Storyboard che lancia un viewController contenente una "Container View", che ha il mio ViewController personalizzato incorporato al suo interno al momento del lancio.

L'unica via d'uscita finora è NON usare il mio refactored .xib (disconnetterlo dalla vista del contenitore).

La mia soluzione:
Ho ripristinato la mia app da una precedente snapshot funzionante e ho creato un nuovo ViewController e .xib personalizzati invece di refactoring. Connesso a Storyboard e ho ricevuto di nuovo il messaggio di errore. Ha pulito la build, ha eliminato l'app dal simulatore e ha ripreso a funzionare, quindi è stata eseguita magicamente senza errori. Per questo motivo credo che ci sia un bug in Xcode con Refactor-Rename, che corrompe alcuni file dello storyboard dietro le quinte. Una volta verificato che il nuovo file .xib si collegava allo storyboard senza errori, ho copiato/incollato il codice classe nella nuova classe viewController personalizzata e ho eseguito il processo di ricollegamento degli oggetti classe a .xib, come previsto . Ha funzionato e tutto ha funzionato ancora.

FYI: ecco alcuni dei passaggi FAILED che ho seguito nel mio tentativo di recuperare dall'errore (prima di rinunciare e ripristinare l'istantanea).
1. Pulizia Build.
2. Eliminazione dell'app nel simulatore iOS.
3. Eliminazione di tutte le viste nel ViewController .xib personalizzato.
4. Denominare il ViewController personalizzato qualcos'altro.
5. In Storyboard, aggiungendo una vista vuota al ViewController che rappresenta la mia classe Viewcontroller personalizzata. Questo ha funzionato e ha consentito alla mia app di funzionare, tuttavia la mia classe personalizzata non era in grado di caricare le proprie viste al posto di questa vista vuota predefinita, né erano visibili le proprie viste dopo aver reso trasparente la vista vuota di default. Il debug ha mostrato che la mia classe personalizzata .xib è nulla quando viene assegnata a self.view.

Attualmente sto evitando il Refactor-Rename di Xcode per i file con un file .xib.

+0

grazie per la tua opinione. Sarò anche attento al refactoring ora. Purtroppo non posso tornare a qualsiasi stato prima, perché non ricordo se ho usato la funzione e questo ha creato il problema e ho apportato molte modifiche nel frattempo. Sto solo testando sul dispositivo reale, dove non ho riscontrato problemi – Lukas1

3

Stavo ricevendo lo stesso errore con un'app che stavo convertendo da file .xib in storyboard. La mia app conteneva un UITabBarController, e toccando determinate schede si innesca l'errore.

Nel mio caso, il problema era che avevo copiato i controller di visualizzazione nello storyboard che utilizzava la proprietà "NIB name" per caricare la vista del controller di visualizzazione da un file .xib esterno. I controller di visualizzazione storyboard non supportano il caricamento di viste da file .xib, quindi lo storyboard conteneva un controller di visualizzazione senza visualizzazione.

Ho aperto il file .xib esterno, copiato la vista, l'ho incollato nel controller di visualizzazione corrispondente nello storyboard e mi sono assicurato che la vista incollata fosse subordinata (rientrata sotto) il controller di visualizzazione nella scena storyboard. Quindi ho ricollegato la vista alle prese nel controller della vista.

Quando ho ripetuto l'applicazione, l'errore era sparito.

+0

In realtà puoi avere un controller di visualizzazione dello storyboard con xib separato per la sua vista. Basta denominare il file xib con il nome della classe controller di visualizzazione, ad es. MyViewController.xib. –

+1

@vladim - Sto cercando di fare come suggerisci, i documenti dicono che puoi, ma questo è ciò che sta causando questo errore. – hooleyhoop

0

Ho avuto gli stessi errori, finalmente risolto. Il mio problema è che ho avuto:

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

abbiamo avuto lo stesso problema: un controller di vista in un file di storyboard con la sua interfaccia definita in un file XIB separato. (Utilizzando Xcode 6.3.1, iOS 8.3 e Swift 1.2.)

Stiamo utilizzando Swift quindi avevamo aggiunto la dichiarazione @objc() per la dichiarazione di classe:

@objc(TestViewController) class TestViewController: UIViewController 

Potremmo istanziare il controller della vista bene da un altro controller vista utilizzando self.storyboard?.instantiateViewControllerWithIdentifier("TestViewController") ma quando si presenta il controller di visualizzazione (utilizzando self.presentViewController(viewController, animated: true, completion: nil)) l'app si è arrestata in modo anomalo con lo stesso errore "mancante proxy" e "non chiave codificante-compatibile per la chiave sceneViewController".

La nostra soluzione che abbiamo trovato dopo molto frustrato debugging trial-and-error-simile era semplicemente assicurarsi che il controller Storyboard ID nel file storyboard non è lo stesso come il nome della classe.

Quando abbiamo ribattezzato Storyboard ID da "TestViewController" a "testViewController" (unica differenza è la minuscola prima lettera), tutto ha funzionato ...

Strano? Puoi scommettere, ma tutto sembra funzionare ora.

+0

Penso che l'idea "assicurati che l'ID dello storyboard del controller di visualizzazione nel file storyboard non sia lo stesso del nome della classe" è fantastico :). –

+0

Funziona anche per me! Mi ha salvato i nervi, grazie! –

+0

ottima soluzione, grazie! Ovviamente è un cazzo di Apple – iago849