2011-11-22 9 views
19

Sto utilizzando un tutorial per scrivere un'app piuttosto semplice. Ho copiato l'app sul mio computer di lavoro oggi. Ha funzionato perfettamente sul mio portatile ieri sera, ma oggi ho ricevuto questo errore. Ho provato a sventrare quasi tutto il codice, e ho anche cancellato tutto nella funzione didFinishLaunchingWithOptions, ma ottengo ancora questo errore. Non ho nemmeno un navBar dichiarato da nessuna parte! Presumo che ci sia qualche tipo di progetto o impostazione di file al di fuori del codice che è il problema?Termina l'applicazione a causa dell'eccezione non rilevata "NSUnknownKeyException"

2011-11-22 14:39:32.294 LetsEat[15320:b603] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<LetsEatAppDelegate 0x5a824a0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key navBar.' 
*** Call stack at first throw: 
(
    0 CoreFoundation      0x00fa45a9 __exceptionPreprocess + 185 
    1 libobjc.A.dylib      0x010f8313 objc_exception_throw + 44 
    2 CoreFoundation      0x00fa44e1 -[NSException raise] + 17 
    3 Foundation       0x0079f677 _NSSetUsingKeyValueSetter + 135 
    4 Foundation       0x0079f5e5 -[NSObject(NSKeyValueCoding) setValue:forKey:] + 285 
    5 UIKit        0x0021b30c -[UIRuntimeOutletConnection connect] + 112 
    6 CoreFoundation      0x00f1a8cf -[NSArray makeObjectsPerformSelector:] + 239 
    7 UIKit        0x00219d23 -[UINib instantiateWithOwner:options:] + 1041 
    8 UIKit        0x0021bab7 -[NSBundle(UINSBundleAdditions) loadNibNamed:owner:options:] + 168 
    9 UIKit        0x0002117a -[UIApplication _loadMainNibFile] + 172 
    10 UIKit        0x00021cf4 -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] + 291 
    11 UIKit        0x0002c617 -[UIApplication handleEvent:withNewEvent:] + 1533 
    12 UIKit        0x00024abf -[UIApplication sendEvent:] + 71 
    13 UIKit        0x00029f2e _UIApplicationHandleEvent + 7576 
    14 GraphicsServices     0x011dd992 PurpleEventCallback + 1550 
    15 CoreFoundation      0x00f85944 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 52 
    16 CoreFoundation      0x00ee5cf7 __CFRunLoopDoSource1 + 215 
    17 CoreFoundation      0x00ee2f83 __CFRunLoopRun + 979 
    18 CoreFoundation      0x00ee2840 CFRunLoopRunSpecific + 208 
    19 CoreFoundation      0x00ee2761 CFRunLoopRunInMode + 97 
    20 UIKit        0x000217d2 -[UIApplication _run] + 623 
    21 UIKit        0x0002dc93 UIApplicationMain + 1160 
    22 LetsEat        0x00001c99 main + 121 
    23 LetsEat        0x00001c15 start + 53 
) 
terminate called throwing an exceptionCurrent language: auto; currently objective-c 
(gdb) 

MODIFICA: questo è il top del mio file delegate.m. Come potete vedere è tutto gasplan:

#import "LetsEatAppDelegate.h" 
//#import "ItemsViewController.h" 

@implementation LetsEatAppDelegate 

@synthesize window = _window; 
@synthesize managedObjectContext = __managedObjectContext; 
@synthesize managedObjectModel = __managedObjectModel; 
@synthesize persistentStoreCoordinator = __persistentStoreCoordinator; 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    // Override point for customization after application launch. 
    [self.window makeKeyAndVisible]; 
    return YES; 
} 

Ho rimosso tutti gli altri file nel progetto e ancora ottengo questo errore.

EDIT 2

Così com'è ora, ho solo questo errore sulla mia macchina di lavoro. Gli stessi file esatti funzionano perfettamente sul mio portatile di casa. Stessa versione di XCode (4.2.1)

+0

Mostra il codice per 'LetsEat'. – zaph

risposta

15

fisso - è andato su iOS Simulator> Ripristina contenuto e impostazioni

8

Il problema si trova nel file del pennino. C'è una vecchia connessione dal LetsEatAppDelegate al navBar.

io non sono sicuro di come la vostra applicazione è impostato, ci può essere un oggetto LetsEatAppDelegate in uno dei file pennino, o ci potrebbe essere un proprietario del file con la classe impostata LetsEatAppDelegate

4 Foundation       0x0079f5e5 -[NSObject(NSKeyValueCoding) setValue:forKey:] + 285 
5 UIKit        0x0021b30c -[UIRuntimeOutletConnection connect] + 112 
6 CoreFoundation      0x00f1a8cf -[NSArray makeObjectsPerformSelector:] + 239 
7 UIKit        0x00219d23 -[UINib instantiateWithOwner:options:] + 1041 
8 UIKit        0x0021bab7 -[NSBundle(UINSBundleAdditions) loadNibNamed:owner:options:] + 168 


2011-11-22 14:39:32.294 LetsEat[15320:b603] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<LetsEatAppDelegate 0x5a824a0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key navBar.' 
*** Call stack at first throw: 
+0

La cosa divertente è che questo è fondamentalmente un nuovo progetto, un'applicazione basata su Windows. Non ho mai creato un Navbar, e ho fatto una ricerca e non ho trovato menzione di navbar in nessun punto del mio progetto. – Jon

+1

Prova ad aprire lo xib pertinente nel generatore di interfacce, facendo clic con il tasto destro sul proprietario del file e controllando la presenza di connessioni pendenti. Questo a volte capita anche a me ... – Warkst

+0

@Warkst grazie per aver chiarito questo. @ Jon vecchia connessione = connessioni penzolanti –

7

Ho riscontrato questo problema e ho scoperto che avevo impostato l''interfaccia principale' e causava un problema.

Per modificare questa impostazione, fare clic sul progetto (nel browser di file a sinistra). L'area centrale dovrebbe ora visualizzare il 'Riepilogo' delle impostazioni per il tuo progetto. Questa è la stessa area in cui cambierai la destinazione dell'applicazione iOS o l'orientamento del dispositivo supportato. Sotto la sezione "Info sulla distribuzione di iPhone/iPod" deselezionare il menu a discesa "Interfaccia principale", lasciandolo vuoto. Questo ha risolto il problema per me.

Buona fortuna.

+2

Questo mi ha aiutato durante il lavoro su un'app Ionic/Cordova. Cancellare il valore per l'interfaccia principale lo ha risolto immediatamente. L'errore non era molto descrittivo del problema. – newz2000

+0

Anche io stavo lavorando con ionic e per qualche motivo ho impostato l'interfaccia principale, dopo un paio di ore di tempo perso ho trovato questo grazie @ newz2000 – marman

+0

Lo stesso per me con un'app Cordova/Ionic2. Comunque, l'ho impostato io prima. – Rocco

25

Ripristina contenuto e impostazioni non ha funzionato.

Ecco cosa sprecato 2 ore del mio tempo a tarda notte:

avevo collegati uno sbocco UIControl nel generatore di interfaccia al IBOutlet nel proprietario del XI ter. Per qualche ragione, l'IBOutlet è stato cancellato dal proprietario, ma il riferimento allo sbocco è rimasto sospeso nello xib. Ciò che sempre mi danno l'errore

"Terminating app due to uncaught exception 'NSUnknownKeyException'" 

Lezione imparata: quando si eliminano eventuali sbocchi per Vars nell'attuazione, assicurarsi di sganciare la rispettiva connessione nella IB

Aggiornamento: (26 Gennaio 2015) C'è un buon motivo per cui Interface Builder oi pennini si comportano in questo modo, e ho capito il perché, oggi.

Se si dispone di un IBOutlet in TheBaseClass, e si dispone di un pennino o una scena in storyboard per un TheSubClass, ci sono due modi (hack) disponibili per voi per collegare questa uscita:

  1. Sotto la Identity Inspector, assegna l'identificativo "Custom Class" a TheBaseClass, collega l'outlet, quindi imposta il nome Class nella sezione "Custom Class" su TheSubclass

  2. Aggiungi l'IBOutlet nel codice di TheSubclass, collegalo all'elemento ui nel pennino, aggiungi il codice IBOutlet in TheBaseClass, elimina quel codice in TheSubClass

Quando mi sono imbattuto in questo answer appena cadde in luogo, il motivo per cui Apple avrebbe lasciare che questo problema di riferimento penzoloni rimangono come è. Perché, non è un bug. È una caratteristica.

+0

La lezione che ho imparato è stata: non usare IB. –

+2

concordato, IB non era così maturo allora, né lo è ora. Ma certamente è un miliardo di volte migliore di 2 anni fa. E le funzionalità di XCode5 IB renderanno più difficile non usare IB, perché è davvero fantastico. Sono passati dallo sviluppo programmatico solo a IB, e ancora lo giuro :) –

+1

Questa è la migliore risposta. Ho speso così tante cellule nervose per questo. Grazie uomo!! –

0

Cancellare "Interfaccia principale" ha risolto anche il problema per me. Potrebbe essere necessario eseguire una "Pulizia" dopo aver cancellato "Interfaccia principale" e prima di costruire.

+0

Ma perché questo causa questo problema? Non ha alcun senso. – CommaToast

3

Oh uomo. Stavo avendo lo stesso problema dopo aver rimosso @properties e/o IBActions e mi stava facendo impazzire! Warkst aveva ragione sui soldi. Vai al controller della vista del problema, fai clic sulla pallina arancione e deseleziona i riferimenti penzolanti che trovi. Potrebbe essere necessario scorrere verso il basso per trovarli tutti. Questo ha risolto il mio problema. Grazie mille.

0

mi capita di incontrare anche questo problema, il metodo

1.In AppDelegate

-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 

il RootViewController è init da questo metodi initWithnibName ..... ma in realtà il file pennino è inesistente, in modo che il eccezione tiro ..

2.Quando viewController vista del carico si blocca

immagino forse perché ho cancellato il file XI ter, allora il controller della vista ancora init con il file di pennino .. quindi aggiungo i metodi di visualizzazione del carico - (void). ed è ok ora..ps: resetto il simulatore, ma non funziona.

Spero che questo aiuto.

Problemi correlati