Pennino caricato ma l'uscita 'view' non è stata impostata


742

Ho aggiunto un nuovo file pennino al mio progetto e ho provato a caricarlo.

Tuttavia, quando faccio clic sull'icona della barra degli strumenti che dovrebbe portarmi alla vista che ho creato, ottengo un NSInternalInconsistencyExceptionmessaggio con:

Chiusura dell'app a causa dell'eccezione non rilevata "NSInternalInconsistencyException", motivo: "- [UIViewController _loadViewFromNibNamed: bundle:] ha caricato il pennino" ... "ma l'output della vista non è stato impostato. '

Così ho aperto il mio file pennino e vedo per la vista che non ci sono punti di riferimento impostati. Tuttavia, provo a fare clic e trascinare il cerchio per "nuovo punto di riferimento" sul proprietario del file, ma non mi consente ... cosa devo fare per visualizzare la vista?


1
Prova a pulire prima la build.
LetynSOFT,

Nel mio caso, il vero errore è stato che ho definito un metodo in viewController (- (void) setValue: (NSNumber *) valore forKey: (NSString *) key) che sovrascrive il metodo ViewController che causa l'errore. Ho risolto il nome di questo metodo
christian mini,

Risposte:


1807

Ragazzi, avete ragione, ma dato che sono un nuovo arrivato, mi ci è voluto un po 'di tempo per capire tutti i passaggi per farlo. Ecco cosa ha funzionato per me:

  • Aprire il file XIB che causa problemi
  • Fai clic sull'icona del proprietario del file sulla barra di sinistra (quella in alto, sembra una casella delineata in giallo)
  • Se non vedi la barra laterale di destra, fai clic sulla terza icona sopra "visualizza" nella barra degli strumenti. Questo mostrerà la barra laterale di destra
  • Nella barra laterale di destra, fai clic sulla terza scheda, quella che assomiglia un po 'a un giornale
  • In "Classe personalizzata" in alto, assicurati che Classe sia il nome del ViewController che deve corrispondere a questa vista. In caso contrario, inseriscilo
  • Nella barra laterale di destra, fai clic sull'ultima scheda, quella che sembra un cerchio con una freccia al suo interno
  • Dovresti vedere "punti vendita" con "vista" sotto di esso. Trascina il cerchio accanto ad esso sull'icona "visualizza" sulla barra di sinistra (in basso, sembra un quadrato bianco con un grosso contorno grigio
  • Salvare lo xib ed eseguirlo nuovamente

Ho riscontrato questo problema anche sul cacao e fintanto che la vista non è stata caricata / aggiunta alla gerarchia della vista, tutti i punti di vista erano NIL. Dopo aver chiamato addSubview o qualcosa di simile, tutti i punti vendita sono stati collegati. La parte divertente della mia storia era che po viewcontroller.view.subviews mostrava gli oggetti mancanti.
Apoc

11
Questa soluzione non funziona più in Xcode 7.3 a partire dai passaggi 4 e 5. Invece, nel builder di interfacce, trascina Control dal proprietario del file alla visualizzazione.
Peiwei,

2
Non ha funzionato per me (nessuna sezione delle uscite nella finestra di ispezione delle connessioni, quindi nessuna "vista" sotto le prese a cui connettersi), ma +1 per lo sforzo che hai messo nella tua risposta. :)
William T. Mallard,

2
Se non vedi "visualizza" nei punti vendita, puoi anche trascinare ctlr dal proprietario dei file alla vista sullo storyboard. Un menu contestuale dovrebbe apparire con un'opzione "view"
josef

1
@ WilliamT.Mallard Ho lo stesso comportamento. MyViewControllerè una sottoclasse di sottoclasse di UIViewControllere non c'è viewsotto "Punti vendita". Se eseguo MyViewControllerla sottoclasse diretta dalla UIViewControllervista appare sotto "Prese". Magia o insetto di Xcode.
user2319066

201

Questa è la proposta di Josh Justice, ma in modo grafico (le foto sono mie):

  1. Seleziona il proprietario del file
  2. Sul pannello laterale destro selezionare la classe personalizzata.
  3. Inserisci il nome della classe personalizzata

inserisci qui la descrizione dell'immagine

  1. Sul pannello laterale destro selezionare gli Oultet
  2. Trascina vista outlet per visualizzare il componente

inserisci qui la descrizione dell'immagine

Alla fine il View Controller viene istanziato con il rolling code:

        PTFilterUserVC *aFilterUserVC = [[PTFilterUserVC alloc] initWithNibName:@"FilterVC" bundle:nil];

        //OPTIONAL.This is how 'I' am interested in present the view controller.
        [self.navigationController pushViewController:aFilterUserVC animated:YES];

1
Grazie Javier Calatrava Llavería ... mi ha aiutato molto dopo aver colpito la testa per un'ora !!!
BharathRao,

un exito muchas gracias
Bruno Sosa Fast Tag

Ho perso il 5 ° passo
hamada147

73

In genere posso risolverlo rifacendo la connessione tra il proprietario del file e la vista. Trascina il controllo dal proprietario del file alla vista (in IB) e seleziona vista dal menu a comparsa.


62

Visualizza identità - Identità di classe non impostata. Dopo averlo impostato sulla classe appropriata, il problema è stato risolto.


Ciao @John, l'ho fatto ma ho ancora questa eccezione.
Mansuu ....

29

Sei sicuro di avere un UIView (o sottoclasse) assegnato alla proprietà "view" del tuo ViewController?

Fare clic con il tasto destro del mouse su "Proprietario file" nel riquadro sinistro di xib per yourViewController e verificare che sia impostato l'output "view". In caso contrario, impostalo su una vista!

questo risolverà definitivamente il problema


2
Risposta chiara e concisa.
sark9012,

15

Per me tutte le cose dichiarate qui https://stackoverflow.com/a/6395750/939501 erano vere ma continuava a generare errori, motivo per cui ho creato una classe View con nome ABCView e poi l'ho cancellata in seguito ho aggiunto un controller di visualizzazione come ABCViewController quindi in qualche modo si riferiva al vecchio ABCView nel nuovo controller di visualizzazione, ho dovuto eliminare ABCViewController e aggiungerne uno nuovo con un nome diverso che risolveva il mio problema.

Grazie


Ancora un bug nel 2020.
Tamás Sengel,

15

Ho avuto lo stesso problema con XCode 4.6.3. Avevo iniziato con un paio di file nominati MySettingsView.he .mli avevo eliminati a favore MySettingsViewController.h, ma nonostante provassi la maggior parte dei suggerimenti menzionati qui, continuava a sbagliare,

05-07-2013 11: 48: 17.205 MyApp [39024: c07] *** App in chiusura a causa dell'eccezione non rilevata 'NSInternalInconsistencyException', motivo: '- [UIViewController _loadViewFromNibNamed: bundle:] ha caricato il pennino "MySettingsView" ma l'output della vista non è stato impostato. "

Evidentemente era ancora "confuso", cercando di caricare MySettingsView.xib invece di MySettingsView Controller .xib. Forse la sua logica "fai quello che voglio dire" è troppo elaborata.

Quindi ho risolto il problema codificando il nome NIB / XIB in MySettingsViewController.m:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:@"MySettingsViewController" bundle:nibBundleOrNil];
}

10

A chiunque utilizzi un metodo xib per creare un UIView e abbia questo problema, noterai che non avrai la presa "view" nel menu di ispezione delle connessioni. Ma se imposti la classe personalizzata dei proprietari del file su un UIViewController e vedrai l'output "view", che puoi semplicemente collegare CMND a un customView.


Eccezionale. Grazie mille. Questa dovrebbe essere una risposta accettata!
Roman

7

Il mio problema con questo è stato causato dall'avere un pennino duplicato nella cartella della classe che non aveva la vista impostata. xcode sembrava scegliere un pennino per una build e poi l'altro la prossima volta che ho realizzato il progetto. Ho appena cancellato l'altro. Sembra buono. Doh!


6

Ho trascorso più di un'ora a cercare di scoprire perché la mia proprietà view non è impostata nel mio view controller dopo averla avviata dal pennino. Ricorda di chiamare "[super initWithNibName ...]" all'interno del initWithNibName del controller di visualizzazione.


5

Ho appena risolto questo problema nel mio. Grande progetto, due file. Uno era "ReallyLargeNameView" e un altro era "ReallyLargeNameViewController"

Sulla base della seconda risposta scelta sopra, ho deciso di pulire la mia build. Nada, ma ero ancora sospettato di XCode (dato che ho due classi identiche, dovrei astrarle ma eh ...) Quindi uno funziona, non uno. I nomi dei proprietari dei file sono tanto quanto copia e incolla, punti ristabiliti, riavvio xCode, ancora niente.

Quindi elimino la classe denominata simile (che è una vista). Presto, il nuovo errore "presa interna non collegata" era letteralmente "webView non chiave valore" blah ... fondamentalmente dicendo "Visual Studio è meglio". Comunque ... cancello il file con nome più piccolo, e bam, funziona.

XCode è confuso da file con nomi simili. E il progetto è abbastanza grande da richiedere un riavvio un po ', che potrebbe far parte di esso.

Vorrei avere una risposta più tecnica di "XCode è confuso", ma bene, xCode viene confuso molto a questo punto. Non confuso allo stesso modo in cui aiuterei un bambino. Funziona ora, :) Dovrebbe beneficiare gli altri se quanto sopra non risolve nulla.

Ricorda sempre di pulire le build (eliminando anche il simulatore)


4

Ho anche avuto lo stesso problema e il mio problema era che ho aggiunto un'altra localizzazione (inglese) al pennino ViewControllers in modo che la mia app con il tedesco di localizzazione non riuscisse a trovare il pennino con l'inglese di localizzazione !! Spero che questo aiuti chiunque!


4

Ho riscontrato lo stesso problema durante la cancellazione accidentale del riferimento xib e l'ho aggiunto di nuovo. Ho appena risolto stabilendo la connessione tra il proprietario dei file e la vista. Inoltre, assicurati che la classe personalizzata di FilesOwner sia il tuo viewController previsto.


3

Per me, il problema è stato causato dalla chiamata initWithNibName:bundle:. Sto usando le celle di visualizzazione tabella da un file pennino per definire i moduli di iscrizione che si trovano su tableViews. Dato che non ho una vista, non ha senso agganciarne una. Invece, se chiamo initWithStyle:invece il metodo e dall'interno, carico il file pennino, le cose funzionano come previsto.


3

Le risposte precedenti mi hanno quasi risolto il problema, ma mancava l'ultimo passaggio.

  1. Crea un file xib e rapido con lo stesso nome.

Aggiungi Visualizza e Swift File

  1. Impostare il proprietario del file come sottoclasse UIView.

inserisci qui la descrizione dell'immagine

  1. Trascina un outlet dalla sottoclasse Visualizza alla UIView, chiamalo "contentView"

aggiungi la visualizzazione contenuto

  1. Aggiungi questo inizializzatore personalizzato in modo che quando viene caricato xib allega il contentView

aggiungi la visualizzazione contenuto come sottoview

required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        Bundle(for: self.classForCoder).loadNibNamed("SampleView", owner: self, options: nil)
        addSubview(contentView)
        contentView.frame = self.bounds
        contentView.autoresizingMask = [.flexibleHeight, .flexibleWidth]
    }

Ora tutti gli @IBOutlet aggiunti verranno allegati.

Saluti, Richard


2

Ho avuto lo stesso problema, ma è stata richiesta una soluzione leggermente diversa. Il problema in questo caso era la classe del proprietario del file, piuttosto che la classe della vista. Per impostarlo, ho dovuto fare clic sull'icona "riproduzione all'indietro" nell'angolo in basso a sinistra della finestra di Interface Builder, e sono quindi apparse opzioni che isolavano le caratteristiche del proprietario del file, del primo risponditore e della vista. Cliccando sul primo (una grande finestra trasparente), mi ha permesso di impostare la sua classe personalizzata come suggerito sopra.


2

Ho avuto lo stesso problema, ma è stata richiesta una soluzione diversa. Il problema in questo caso era che la classe del proprietario del file non era connessa al file xib.


2

Stasera mi sono imbattuto in qualcosa di molto simile, con una sottoclasse Swift UIViewController. In questo caso, nessuna delle soluzioni precedenti ha funzionato, ma riordinando un po 'il mio codice ha funzionato. Net-net, avendo un'estensione alla sottoclasse, si verificano prima che la stessa definizione della sottoclasse nello stesso file sembri confondere XCode, nonostante la compilazione sia corretta; la correzione consisteva nel posizionare le estensioni dopo la definizione della sottoclasse.

Ho pubblicato i dettagli in una risposta a questa domanda simile .


2

Nel mio caso, l'inizializzatore designato - (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNilnella classe *** ViewController è stato implementato, quindi anche se quando chiamo un altro inizializzatore per inizializzare l'oggetto, verrà chiamato l'inizializzatore designato.

Quindi, per risolvere questo problema controllando se - (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNilè anche un modo corretto.


2

Ho riscontrato questo problema in modo leggermente diverso dalle altre risposte qui.

Se ho semplicemente creato un nuovo file xib, aggiunto un UIViewController ad esso in Interface Builder e impostato la classe personalizzata di UIViewController sul mio controller di visualizzazione, ciò ha provocato l'arresto anomalo del "view outlet non impostato". Le altre soluzioni qui dicono di trascinare in modo controllato l'output della vista sulla vista, ma per me l'output della vista era disattivato e non sono riuscito a trascinarlo in modo controllato.

l'outlet visualizzabile in grigio

Ho capito che il mio errore era l'aggiunta di un UIViewController in Interface Builder. Invece, ho dovuto aggiungere un UIView e impostare la classe personalizzata del proprietario del file sul mio controller di vista. Quindi ho potuto controllare e trascinare il punto di vista del proprietario del file nella mia nuova vista UIView e tutto ha funzionato come dovrebbe.


1

Ho appena avuto lo stesso errore nel mio progetto, ma un motivo diverso. Nel mio caso, avevo una configurazione IBOutlet con il nome "Visualizza" nella mia classe UITableViewController personalizzata. Sapevo che "view" era speciale perché apparteneva alla classe base, ma non pensavo che anche View (caso diverso) fosse un problema. Immagino che alcune aree del cacao non siano sensibili al maiuscolo / minuscolo, e probabilmente caricare uno xib è una di quelle aree. Quindi l'ho appena rinominato in DefaultView e ora va tutto bene.


1

seleziona il proprietario del file e vai al controllore identità per dare il nome della classe a cui corrisponde. Se nessuno dei metodi precedenti funziona e non riesci ancora a vedere l'outlet della vista, dai una nuova connessione all'output di riferimento al proprietario del file, quindi puoi vedere l'outlet della vista. Fare clic su Visualizza outlet per stabilire una connessione tra Visualizza outlet e il proprietario del file. Esegui l'applicazione funziona perfettamente.


1

Nel mio caso, la vista non è stata visualizzata in xib. in xib la vista era size = none (4a scheda mano destra). Ho impostato la dimensione su Freeform e ricaricato xCode. view è stato appellato e ho impostato il link corretto su View.


1

Se hai provato di tutto e ricevi ancora questo errore, prova a ricreare il file di classe da zero, ma ricorda di selezionare la casella di controllo "Crea anche file XIB". Ciò collegherà automaticamente alcuni elementi che non sono collegati durante la creazione di questi file separatamente. Dopo averlo creato, puoi probabilmente tagliare e incollare tutto sul nuovo XIB e dovrebbe funzionare bene.

Sto riscontrando questo problema specificamente con la creazione di file separatamente in Swift.


1

per me è successo quando

  • Ho una classe ViewController (.mm / h) associata al file Nib,
  • UIView da questo ViewController deve essere caricato su un'altra vista come sottoview,

  • chiameremo qualcosa del genere

    -(void)initCheckView{
    
       CheckView *pCheckViewCtrl = [CheckView instance];
    
       pCheckView = [pCheckViewCtrl view];
    
       [[self view]addSubview:pCheckView];
    
       [pCheckViewCtrl performCheck];        
    
    }

Dove

+(CheckView *)instance{
    static CheckView *pCheckView = nil;
    static dispatch_once_t checkToken;

    dispatch_once(&checkToken, ^{
        pCheckView = [[CheckView alloc]initWithNibName:@"CheckView" bundle:nil];
        if ( pCheckView){
            [pCheckView initLocal];
            **[pCheckView loadView];**
        }
    });

    return pCheckView;

}

Qui mancava loadView ,,, l'aggiunta di questa riga ha risolto il mio problema.


1

Ho avuto lo stesso problema, ho capito ed è per il fatto che avevo spuntato " Celle statiche " nelle proprietà della Vista tabella sotto l' opzione Contenuto . Ha funzionato quando è cambiato in " Dynamic Prototypes". La schermata è sotto. inserisci qui la descrizione dell'immagine


1

Ho avuto un problema simile con Xcode 9.3 e l'impostazione di "Modulo" sotto la finestra di ispezione degli attributi "Proprietario del file" sul modulo di progetto ha risolto questo problema per me.


1

Apri il file dello storyboard in cui è presente viewController o il file correlato XIB con textEdit.app e controlla se lo storyboard o il nome XIB è lo stesso del viewController, quindi modificalo, salva e ricarica / riavvia Xcode.


1

Se stai usando un metodo init personalizzato, controlla che stai restituendo qualcosa di valido. Mi sono imbattuto in un pezzo di codice che si è schiantato su qualcosa del genere:

- (id)init {
   self = [super init];
   if (self) {
      CustomController *controller = [[NSBundle mainBundle] loadNibNamed:NSStringFromClass(className) owner:self options:nil];
   } return self;
}

In un'altra classe, il controller è stato creato in questo modo:

CustomController *controller = [[CustomController alloc] init];

Il problema è che nel metodo init, self non è cambiato e dovrebbe invece apparire così:

- (id)init {
   self = [super init];
   if (self) {
      CustomController *controller = [[NSBundle mainBundle] loadNibNamed:NSStringFromClass(className) owner:self options:nil];
      [controller viewDidLoad];
      self = controller;
   } return self;
}

0

Vorrei secondare Stephen J. Alcune volte X Code si confonde. Ho avuto un'esperienza in cui avevo giocato molto con l'interfaccia utente e avevo aggiunto ed eliminato punti vendita parecchie volte. I punti vendita non sarebbero più collegati. Non ho mai capito un motivo specifico (avevo provato tutte le soluzioni sopra), e dovevo solo eliminare il NIB e ricrearlo da zero, e in effetti ho dovuto usare un nome diverso per il NIB prima che funzionasse. (XCode 4.6.1) Ho perso un paio d'ore su questo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.