esta class no es compatible con la encoding de valor key para la key authView

Cuando ejecuto mi aplicación en un simulador funciona bien, cuando bash con el dispositivo no funciona y recibo estos errores:

NOTA : no encontré ningún tipo de class authView en mi código

2011-02-24 12:04:14.472 TestP[473:307] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<TestP 0x19d2b0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key authView.' *** Call stack at first throw: ( 0 CoreFoundation 0x33ac0987 __exceptionPreprocess + 114 1 libobjc.A.dylib 0x3347b49d objc_exception_throw + 24 2 CoreFoundation 0x33ac0705 -[NSException dealloc] + 0 3 Foundation 0x3367db4f -[NSObject(NSKeyValueCoding) setValue:forUndefinedKey:] + 182 4 Foundation 0x3367d03b _NSSetUsingKeyValueSetter + 90 5 Foundation 0x3367eda3 -[NSObject(NSKeyValueCoding) setValue:forKey:] + 194 6 Foundation 0x33630b17 -[NSObject(NSKeyValueCoding) setValue:forKeyPath:] + 130 7 UIKit 0x3224c60f -[UIRuntimeOutletConnection connect] + 66 8 CoreFoundation 0x33a63fc7 -[NSObject(NSObject) performSelector:] + 18 9 CoreFoundation 0x33a6cd51 -[NSArray makeObjectsPerformSelector:] + 388 10 UIKit 0x3224b577 -[UINib instantiateWithOwner:options:] + 586 11 UIKit 0x3224cb39 -[NSBundle(UINSBundleAdditions) loadNibNamed:owner:options:] + 92 12 UIKit 0x3209e871 -[UIApplication _loadMainNibFile] + 96 13 UIKit 0x3209a1fd -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] + 180 14 UIKit 0x3206648b -[UIApplication handleEvent:withNewEvent:] + 1114 15 UIKit 0x32065ec9 -[UIApplication sendEvent:] + 44 16 UIKit 0x32065907 _UIApplicationHandleEvent + 5090 17 GraphicsServices 0x33b0ef03 PurpleEventCallback + 666 18 CoreFoundation 0x33a556ff __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 26 19 CoreFoundation 0x33a556c3 __CFRunLoopDoSource1 + 166 20 CoreFoundation 0x33a47f7d __CFRunLoopRun + 520 21 CoreFoundation 0x33a47c87 CFRunLoopRunSpecific + 230 22 CoreFoundation 0x33a47b8f CFRunLoopRunInMode + 58 23 UIKit 0x32099309 -[UIApplication _run] + 380 24 UIKit 0x32096e93 UIApplicationMain + 670 25 TestP 0x00002213 main + 98 26 TestP 0x000021ac start + 40 ) terminate called after throwing an instance of 'NSException' 

Probablemente haya desorderado las cosas de su propietario de file en sus xibs. Esta exception se +[UINib...] durante la nib sin archivar (como lo demuestra +[UINib...] en el backtrace). Está intentando conectar tus IBOutlets que hayas definido.

Una de sus vistas está configurada para ser la authView del propietario del file. Sin embargo, cuando es hora de desarchivar la punta, el propietario no tiene una propiedad authView , por lo que la desarchivación está fallando.

@Dave DeLong señaló hacia la derecha.

Solución

  • Encuentra cuando se lanza la exception, qué viewController se está cargando.
  • A continuación, compruebe el file nib del viewController, debe haber un IBOutlet adjunto en xib, pero podría omitirse en el file viewController.h o podría haber algún control que se adjunta que falta en el file xib.

¿Por qué correr en Simulator? A veces termina en arruinar.

Solo haz los pasos

  1. Construir -> Limpiar
  2. Construir -> Limpiar todos los destinos

Ahora ejecuta el código real, puede ser un problema, tiene resolución en el dispositivo también o puede ser que comience a lanzar una exception en el simulador también en caso de que realmente haya un problema. (Ya he mencionado la solución)

Así es como resolví este problema. Entré en mi file 'Story Board' y seleccioné la vista que estaba causando los problemas. Luego hice clic en la pestaña del Connections Inspector y verá conexiones con signos de exclamación a la derecha en lugar de círculos sólidos. Elimine estos y haga los ajustes si es necesario. Guardar> Ejecuta tu aplicación y debería funcionar. Espero que esto ayude 🙂

Creo que una posible causa para elevar esa exception es cuando hayas cambiado el nombre de alguna variable de IBOutlet después de que las conexiones de storyboard ya se hayan realizado. Por lo tanto, el elemento de interfaz de usuario en el guión gráfico sigue haciendo reference al nombre de la variable anterior. Resolví esto comprobando la representación XML del guión gráfico (haz clic derecho en tu file .storyboard y ábralo como Código fuente) y borrando el nombre de la variable IBOutlet anterior (innecesario).

Por ejemplo, digamos que tiene un UITextField en el guión gráfico y tiene la propiedad correspondiente para ello:

 @property (retain, nonatomic) IBOutlet UItextField *myTextField; 

Conecta el elemento de interfaz de usuario en el guión gráfico a esa propiedad y luego decides cambiar el nombre de alguna manera a la variable. Ahora, si hace clic con el button derecho en su UITextField en el guión gráfico, observará que existen dos puntos de reference: el antiguo y el nuevo. Puede eliminar el antiguo haciendo clic en el signo 'x' en el Inspector de Conexiones o editando la variante XML del file del guión gráfico.

algo salió mal cuando en xcode 4 con alguna reference, porque declaré IBOutlet que la reference authView luego funcionó y funcionó !, luego eliminé la statement IBOutlet y funcionó bien

Acabo de limpiar el proyecto y eliminé la aplicación del dispositivo y funcionó nuevamente. Error hacía reference a una vista que ya había eliminado.

He descubierto que estos errores surgen principalmente cuando se conectan properties, se editan y se vuelven a conectar … analice su inspector de connection para ver los valores inesperados que quedan de su connection creada y destruida anteriormente.

Parece que su Interface Builder no funcionó correctamente. Como se sugirió anteriormente, intente limpiando y reconstruyendo. Si no funciona, te sugiero que vuelvas a crear tu interfaz xib. Me funcionó en una ocasión similar.

Probablemente haya creado un IBOutlet, luego lo haya eliminado, luego haya enlazado uno nuevo, pero en el xib 'Inspector' olvidó eliminar el enlace y ahora tiene una reference IBOutlet duplicada que el comstackdor no puede encontrar.

En mi caso fue aún más espeluznante. Tenía un XIB asociado al VC que había eliminado por completo, ya que era solo de código. Ejecutar en el simulador muy bien, pero se bloquearía en el dispositivo de forma sistemática.

Así que limpio, reconstruyo, cierra XCode, fui a merendar y grito a la mac. Nada, el comstackdor siguió apuntando a un button inexistente en un XIB inexistente.

Intenté cambiar el nombre de la class y ¡funcionó!