Xcode - ¿Cómo arreglar 'NSUnknownKeyException', motivo: ... esta clase no es compatible con la codificación del valor clave para el error de la clave X "?

Estoy tratando de vincular un UILabel con una IBOutlet creado en mi clase.

Mi aplicación falla con el siguiente error.

¿Qué significa esto?

¿Cómo puedo arreglarlo?

*** Finalizando la aplicación debido a una excepción no detectada 'NSUnknownKeyException', motivo: '[ setValue: forUndefinedKey:]: esta clase no es compatible con la codificación de valores clave para la clave XXX. '

preguntado el 21 de junio de 10 a las 16:06

pedrotorres tiene razón. Si, esto es correcto. Si está haciendo una UITableViewCell, en IB, recuerde convertir el propietario del archivo en NSObject y la UITableViewCell'Class en la clase .h que definió. -

Cuando se encuentra con un problema de este tipo y la clave ofensiva es un Térmica en lugar de un salida entonces lo más probable es que tengas un salida que hace referencia errónea a su Térmica nombre de la función en lugar de su salida nombre de la variable. -

Debe notar que el nombre de la clave en el mensaje de error (el OP lo llama 'XXXX') es el nombre que le dio a algo en su archivo nib. Eso debería ayudar a acotar su búsqueda. -

Presenté rdar: // 22105925 pidiéndole a Apple que hiciera más obvios estos errores en el momento de la compilación. :) -

¡cómo RESOLVER INMEDIATAMENTE el problema! stackoverflow.com/a/13812660/294884 consejo fantástico -

30 Respuestas

Su controlador de vista puede tener la clase incorrecta en su xib.

Descargué tu proyecto.

El error que está recibiendo es

'NSUnknownKeyException', motivo: '[ setValue: forUndefinedKey:]: esta clase no es compatible con la codificación de valores clave para la cadena de claves. '

Es causado por el Second ver controlador en MainWindow.xib tener una clase de UIViewController en lugar de SecondView. Cambiar a la clase correcta resuelve el problema.

Por cierto, es una mala práctica tener nombres como "cadena" en Objective-C. Invita a una colisión de nombres en tiempo de ejecución. Evítelos incluso en aplicaciones de práctica única. Las colisiones de nombres pueden ser muy difíciles de rastrear y no querrás perder el tiempo.

Otra posible razón para este error: al copiar y pegar elementos de un controlador a otro, Xcode de alguna manera mantiene ese enlace al controlador original, incluso después de editar y volver a vincular este elemento al nuevo controlador.

Otra posible razón para este error:

Mala salida.

Tu tienes ya sea remoto or rebautizado un nombre de salida en tu .h archivo.

Quitarlo en .xib or .storyboard Inspector de conexión del archivo.

Una razón más posible

(En mi caso) Extensión de UIView con propiedades enlazables y valores de configuración para esas propiedades enlazables (es decir, sombra, radio de esquina, etc.) luego elimine esas propiedades de la extensión UIView (por alguna razón) pero lo siguiente <userDefinedRuntimeAttributes> permaneció en xml (de foo.storyboard):

<userDefinedRuntimeAttributes>
  <userDefinedRuntimeAttribute type="color" keyPath="shadowColor">
      <color key="value" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
  </userDefinedRuntimeAttribute>
  <userDefinedRuntimeAttribute type="number" keyPath="shadowOpacity">
      <real key="value" value="50"/>
  </userDefinedRuntimeAttribute>
  <userDefinedRuntimeAttribute type="point" keyPath="shadowOffset">
      <point key="value" x="5" y="5"/>
  </userDefinedRuntimeAttribute>
  <userDefinedRuntimeAttribute type="number" keyPath="shadowRadius">
      <real key="value" value="16"/>
  </userDefinedRuntimeAttribute>
  <userDefinedRuntimeAttribute type="number" keyPath="borderWidthValue">
      <real key="value" value="0.0"/>
  </userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>

Solución: Haga clic derecho en foo.storyboard > Abrir como código fuente> buscar por keyPath (es decir, shadowRadius)> Eliminar el </userDefinedRuntimeAttributes> que causando el problema

respondido 26 mar '20, 01:03

Además, no olvide conectar la salida de "vista" de la punta a la salida de vista del propietario del archivo (la salida de vista de su clase personalizada heredada de UIViewController). Esto se puede hacer arrastrando el control desde "Propietario del archivo" en "Titulares de lugar" hasta "Ver" en "Objetos" y seleccionando la salida de vista. - Nirma

Me aseguré de que toda la clase ya esté configurada, pero la excepción NSUnknownKeyException aún aparece :( - Zennichimaro

Ni siquiera estoy usando Interface Builder y sigo recibiendo este error. ¿Tienes idea de lo que está pasando? - sudo

No importa. Fue por dos cosas: Xcode todavía estaba accediendo a mi guión gráfico principal a pesar de que se eliminó del proyecto, y el simulador lo tenía en caché. No recomiendo mucho el uso de guiones gráficos o NIB, son ridículamente problemáticos. - sudo

@Josh Lol. Cada vez que me siento motivado para crear una aplicación nativa en xcode, siempre termino con pasar un día tratando de averiguar cómo hacer cualquier cosa. Soy ac # dev, así que he estado viendo ofertas de Xamarin y Telerik (nativescript) últimamente. - El hombre muffin

Es posible que tenga una mala conexión en su xib.

He tenido este error muchas veces. Si bien la respuesta de TechZen es absolutamente correcta en este caso, otra causa común es cuando cambiar el nombre de una propiedad IBOutlet en su .h / .m que ya ha conectado al propietario del archivo en la plumilla.

De tu plumilla:

  1. Seleccione el objeto en IB y vaya al 'Inspector de conexiones'.
  2. En 'Puntos de referencia de puntos de venta', asegúrese de que su objeto aún no esté conectado al nombre de propiedad anterior ... haga clic en la 'x' pequeña para eliminar la referencia y volver a construir.

    enter image description here

Otra causa común si está utilizando Storyboard, su UIButton puede tener más de una asignación (la solución es casi la misma que para nib):

  1. Abra su guión gráfico y haga clic derecho en el botón UIB
  2. Verá que hay más de una asignación / referencia a este botón. Quite una de las ventanas grises "Principal ..." con la "x" pequeña:

    ejemplo 2

Respondido el 15 de enero de 20 a las 07:01

¡Gracias! En mi caso, tenía 2 salidas a la misma vista, y deshacerme de la antigua y conectar la vista a la nueva terminó con la excepción. - marca patterson

el mío fue duplicado dos veces. Comencé a desconectar cada uno después de arrastrar y soltar desde una versión Pro (de una versión Lite) pensando que estaba colgando de conexiones en el otro proyecto. Cuando encontré el duplicado y me tomó 3 clics hacer la desconexión, deseé sinceramente haberlo hecho 3 días antes. Bueno, así es la vida de un desarrollador. - aremvee

Tuve el problema de que UIButton tenía más de una asignación. Esto resolvió mi problema. - codificador mítico

También tuve este problema. No olvide verificar las conexiones de los puntos de venta en vistas particulares en lugar de solo supervistas. En mi caso, las supervistas no mostraban las conexiones incorrectas = / - augusto carmo

Tuve un error similar en el que conecté una salida de botón a un archivo rápido de ViewController incorrecto cuya página aún no se había creado usando la GUI - brw59

A veces, esto tiene que ver con su "Heredar de destino". Ese valor debe establecerse. Con las aplicaciones de destino único, puede seleccionar Heredar de destino. Si tiene más de un objetivo, seleccione el objetivo deseado.

enter image description here

Respondido 10 Oct 18, 06:10

Esta respuesta me ayudó para un caso específico. Tengo que seguir trabajando en un antiguo proyecto obj-c con múltiples objetivos. Creo una UITableViewCell personalizada en Swift y tuve el mismo error. Al habilitar "Heredar de destino" funcionó. ¡Gracias! - magohamot

El módulo no siempre está configurado correctamente; por ejemplo, si completa el nombre de la clase antes de crearla. - Johan

He llenado el nombre de la clase sin presionar la tecla "Enter" al final para que el IDE no verifique esta bandera automáticamente. Perdí 1 hora en esto. Gracias. - MatPag

Nunca encontré este tipo de error en obj-c. Pero gracias ha resuelto el misterio. - Pradeep Kachhawaha

¿Por qué está esto enterrado en la tercera página? - Sergio

Tuve que eliminar la aplicación del simulador / iPhone para deshacerme de este error.

Respondido el 09 de enero de 12 a las 05:01

+1 esto lo arregló para mí. Estaba limpiando un código que usaba IB. Cuando eliminé un botón del código, el error seguía apareciendo incluso cuando no se hacía referencia a este botón en los archivos de plumilla (al menos eso podía ver). - Domingo Lunes

Creo que esto es necesario si está depurando dos aplicaciones que tienen el mismo nombre. - Anton

Sí, parece que algo del XIB está almacenado en caché en el simulador, lo cual es una molestia si está probando actualizaciones, ya que en realidad no desea tener que eliminar la aplicación anterior. - Carlos P.

Tuve este problema al eliminar mi archivo XIB. Esto solucionó el problema. - balboa

Si eliminar la aplicación no funciona, intente eliminar la carpeta XCode DerivedData. que puede almacenar en caché un archivo xib incorrecto. Abra XCode -> Preferencias -> Ubicaciones -> Abra la carpeta DerivedData y arrástrela a la Papelera. - Felipe Fung

Tuve este error cuando intentaba implementar una ViewCell personalizada para una tabla. Cuando resalté View controller para el XIB y me conecté a los elementos en CellView, causé el error "esta clase no es compatible con la codificación del valor clave para la clave" una vez que los eliminé, se eliminó el error.

Elimine las conexiones en la imagen de abajo. Elimine las conexiones en el inspector cuando el propietario del archivo esté resaltado

Solo asegúrese de tener solo las conexiones con la celda de vista de tabla. Para verificar, haga clic en la celda de vista de tabla y en INSPECTOR busque sus conexiones.

La conexión debe estar aquí cuando la celda de vista de tabla esté resaltada

respondido 21 nov., 13:21

Esto lo hizo por mí, muchas gracias. Eliminé las conexiones cuando se seleccionó "Propietario del archivo" en la columna de la izquierda, luego seleccioné mi celda personalizada y las volví a adjuntar. ¡Éxito! - rogare

Incluso con xcode7 esto funciona, simplemente use el "Inspector de conexiones" del panel derecho. Retire la salida de la celda de vista de mesa y de la etiqueta, luego vuelva a agregarla y todo debería funcionar. - la vida es tonto

¡Esto funciona, pero debe asegurarse de que FileOwner no se haya configurado! El propietario del archivo debe seguir siendo NSObject. stackoverflow.com/questions/13793162/… - devjme

¡La misma respuesta me salvó dos veces! - wm.p1us

¿Podría alguien decirme cuál es la diferencia entre establecer el nombre de la clase en File's Owner vs directo a UIView? - sotavento

Si es una aplicación solo para iPhone, no universal, asegúrese de que el siguiente campo esté vacío:

Objetivos> Resumen> Información de implementación de iPhone / iPod> Interfaz principal

Si especifica un xib allí, se bloquea.

Respondido el 30 de junio de 12 a las 14:06

Sí, eso fue todo para mí. Mientras me agito para agregar un nuevo controlador de vista de inicio, configuré esto en la nueva clase / nib. Después de conectar la salida de la vista, recibí este error. Borrar este campo lo solucionó. - terrible recuerdo

Esto funcionó para mí. Tenga en cuenta que también tuve que eliminar la versión anterior del dispositivo / simulador para que funcione. - Jimt

Gracias, este era mi problema. Había cambiado el nombre de mi archivo de guión gráfico de iPad y no lo actualicé en las preferencias de mi proyecto. - RobertoJoseph

¡Gracias! Esto me lo resolvió. (Tuve que eliminar la aplicación del simulador después de cambiar el campo de la interfaz principal para que estuviera vacío. El simple hecho de cambiar ese campo no obligó al simulador a romper el caché). agachadiza

¡Recordé que cambié las cosas de una aplicación universal a una aplicación solo para iPhone y esto solucionó el error! - Justin

Este error indica que un Interface Builder ya conectado el objeto es eliminado / renombrado en la fuente de su propietario (propietario del archivo).

Control-clic en el Propietario de los archivos en Interface Builder si ve un signo de exclamación necesitas arreglar eso.

En la imagen de abajo, puede ver que "aRemovedView" tiene un signo de exclamación a su derecha, eso se debe a que eliminé el objeto de vista IBOutlet cuando ya estaba conectado en el IB.

enter image description here

Esto da el siguiente error: Finalizando la aplicación debido a una excepción no detectada 'NSUnknownKeyException', motivo: '[setValue: forUndefinedKey:]: esta clase no es compatible con la codificación del valor clave para la clave aRemovedView. '

Respondido 31 Jul 13, 04:07

¡Gracias! Esto me lo arregló. He tenido este problema durante mucho tiempo y no sabía cómo solucionarlo más que comenzar desde cero. Esto fue todo, eliminó IBOutlets del controlador de vista, pero no sabía que todavía estaban referenciados / vinculados en el propietario (en este caso, "Controlador de vista" en el constructor de interfaces - Xcode 6). - ira herman

Tuve el mismo problema y, aunque la respuesta de TechZen puede ser realmente sorprendente, me resultó difícil aplicarla a mi situación.

Finalmente, resolví el problema vinculando la etiqueta a través del controlador que figura en Objecten (resaltado en la imagen de abajo) en lugar de a través del Propietario del archivo.

Espero que esto ayude.

enter image description here

Respondido el 28 de junio de 13 a las 19:06

en mi caso fue un error en el código fuente del guión gráfico, siga estos pasos:

  1. primero abre tu storyboard como código fuente
  2. buscar <connections>
  3. eliminar conexiones no deseadas

Por ejemplo:

<connections>
    <outlet property="mapPostsView" destination="4EV-NK-Bhn" id="ubM-Z6-mwl"/>
    <outlet property="mapView" destination="kx6-TV-oQg" id="4wY-jv-Ih6"/>
    <outlet property="sidebarButton" destination="6UH-BZ-60q" id="8Yz-5G-HpY"/>
</connections>

Como puede ver, estas son conexiones entre los nombres de las variables de código y las etiquetas xml de diseño del guión gráfico;)

Respondido 15 Abr '16, 19:04

enter image description here enter image description here

Mi solución fue similar a la de Gerard Grundy. Al crear una UITableViewCell personalizada utilizando un XIB, apliqué por error el nombre de la clase personalizada al propietario del archivo en lugar de a la UITableViewCell. Aplicar la clase a UITableViewCell en el lienzo y conectar mis propiedades de IBOutlet resolvió el problema.

respondido 06 mar '14, 19:03

Ayyy dag agarralo ... No puedo creer la frecuencia con la que cometo este error. Gracias lol - Benjamin

  1. Solo necesitas especificar IBOutlet una vez el IBOutlet etiquetar su ivar es innecesario.
  2. ¿Está instanciando su NIB usando su UIViewController? En algún momento deberías estar llamando [SecondView initWithNibName:@"yourNibName" bundle:nil];

Respondido el 21 de junio de 10 a las 21:06

¡Esto ayudó! Recibía un error de cumplimiento de codificación de valor clave sobre una propiedad desde un controlador de vista diferente. Resulta que estaba llamando -initWithNibName con el nombre de plumilla incorrecto. - jlstrecker

Sí, esto también me ayudó ... estaba usando UIViewController en lugar de MyCustomeViewController ... pero este es un problema de jerarquía que puede ser ... la introspección falló debido al objeto de clase mal colocado ... Gracias de todos modos - Futur

Tuve un problema similar. Dos entradas idénticas de IBAction por accidente. No se mostró en el código, solo en el clic derecho del UIControl (A UIStepper en mi caso). Simplemente borrando uno lo solucionó. - Dave Hubbard

Esto me estaba sucediendo solo cuando depuraba en un dispositivo (iPhone). El simulador de iOS funcionaba bien. Hacer un "Producto-> Limpiar" de Xcode pareció resolver el problema, pero no tengo idea de por qué.

Respondido 14 Oct 13, 01:10

Esto soluciona mi problema. tsk2x casi 3 días de dolor de cabeza. - user3818576

Proporciona una respuesta a la pregunta. Algo se estropeó en Nib y hacer una limpieza lo solucionó. Leí y probé todo lo anterior en vano y luego hice la limpieza, y después de 1 hora de intentar arreglarlo, la solución de Maj lo arregló. Me hubiera encantado ver qué en el XML podría haber causado esto, pero he seguido adelante. - LevinsonTecnologías

De hecho, esto resuelve el problema: probé numerosas sugerencias anteriores y solo el proyecto solucionó este error que de repente comenzó a ocurrir. Ugg ... - DustinB

Esto solucionó mi problema, probé muchas de las sugerencias anteriores. ¡Parece extraño! - naveen shan

Tuve exactamente el mismo mensaje de error y gracias (!!) a Kira desde http://www.idev101.com Pude resolver el desafío. Solo encontré su sitio después de buscar en Google y apilar todos estos hilos. Ahora estoy publicando aquí para el próximo que llega a StackOverFlow y tiene el mismo desafío que tuve, ya que esa persona probablemente llegará a este hilo a través de Google.

Me di cuenta de que hice mal esto:

UIViewController *deviceViewController = [[UIViewController alloc] initWithNibName:@"DeviceViewController" bundle:nil];

En lugar de esto:

DeviceViewController *deviceViewController = [[DeviceViewController alloc] initWithNibName:@"DeviceViewController" bundle:nil];

Dónde

DeviceViewController

¿Era el nombre de mi clase también conocido como

DeviceViewController.h 
DeviceViewController.m

Tendrás que

"import DeviceViewController.h"

en su implementación (archivo .m) donde desea llamar, por ejemplo, otro UIViewController.

No lo siento en absoluto si solo estoy diciendo lo obvio para principiantes como yo y puedo obtener votos negativos, ya que esto no está exactamente relacionado con la pregunta, pero estaba buscando 4 (?!?) Horas seguidas ahora para la respuesta a estos mensajes de error. . Si puedo dedicarle esto a 1 o 2 personas, sería genial :)

PD: para aquellos interesados ​​en cómo continúa el código para cargar el otro UIViewController:

    [self presentViewController:deviceViewController animated:YES completion:nil];

Respondido 31 ago 13, 22:08

GRACIAS por todos los pasos allí, estaba usando Xcode 5 y realmente no sabía cómo agregar manualmente una plumilla, ya que solo puede agregar un guión gráfico de forma predeterminada ... Recibí algunas instrucciones pero no tan detalladas como las suyas. ¡¡Realmente ayudó !! - Trampa

"Hice esto mal ..." gracias, no es la primera vez que gasto mucho por este error tan estúpido - tontonCD

Puede provenir del hecho de que ha arrastrado el control y ha creado una salida o acción y se ha olvidado de eliminarlo. Incluso si eliminó el código, o incluso si ha creado suficiente cmd + Z, deberá ingresar al inspector de conexión de su guión gráfico y ver si la acción o salida que creó todavía está aquí o no.

Respondido 12 ago 17, 13:08

¡Gracias! Soy un n00b en Xcode y me tomó un tiempo encontrar los enlaces maliciosos. En Xcode 9.2, puede hacer clic con el botón derecho en el elemento en la vista del guión gráfico y marcar "Puntos de referencia". - kuñigami

Mirando las otras respuestas, parece que hay muchas cosas que pueden causar este error. Aquí hay uno más.

Si

  • tener una vista personalizada
  • agregó una propiedad @IBInspectable
  • y luego lo borró

Entonces también puede obtener un error similar a

No se pudo establecer (xxx) la propiedad inspeccionada definida por el usuario en [Su vista personalizada] ...: esta clase no es compatible con la codificación del valor clave para la clave [xxx].

La solución es eliminar la propiedad anterior.

enter image description here

Abra el inspector de identidad para su clase, seleccione el nombre de la propiedad en Atributos de tiempo de ejecución definidos por el usuario y presione el botón menos (-).

Respondido 05 Feb 18, 14:02

Vine tan a menudo en esta página ... ¡Esta vez esta solución lo logró! Pero por extraño que parezca, la antigua propiedad para eliminar estaba en realidad en otro ViewController que el que falla, no tengo idea de por qué. - Jefes

Esto me sucede cuando mi controlador de vista originalmente tenía un archivo .xib, pero ahora se crea mediante programación.

Aunque eliminé el archivo .xib de este proyecto. Los usuarios de iPhone / iPad pueden contener archivos .xib para este controlador de vista.

Intentar cargar un archivo .xib generalmente causa este bloqueo:

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

La solución al crearlo programáticamente puede ser esta:

-(void)loadView {
    // Ensure that we don't load an .xib file for this viewcontroller
    self.view = [UIView new];
}

Respondido el 27 de junio de 13 a las 20:06

La propiedad "Módulo" de View Controller en Identity Inspector puede ser diferente de lo que esperaba. También asegúrese de que se agreguen nuevas clases a su lista de objetivos.

Respondido el 20 de Septiembre de 15 a las 17:09

votando ya que así fue en mi caso. Estoy usando Swift y Storyboards. Cuando creé un nuevo objetivo de compilación (para hacer una variante de compilación), la aplicación no funcionó en la nueva variante mientras que la primera funcionó bien. La aplicación se bloqueó en un controlador de vista donde el nombre del módulo se estableció de alguna manera en módulo desde el primer objetivo, mientras que en los controladores de vista en funcionamiento estaba Actual -. Necesita borrar el nombre del módulo allí en este caso. - Mixaz

Tuve un problema similar para un proyecto que tiene dos objetivos (con su propio MainWindow XIB). El problema fundamental que me causó este error fue que la clase UIViewController no estaba incluida en la lista de recursos del segundo proyecto. Es decir, el constructor de interfaces me permitió especificarlo en MainWindow.xib, pero en tiempo de ejecución el sistema no pudo localizar la clase.

Es decir, haga clic en cmd en la clase UIViewController en cuestión y verifique que esté incluida en la pestaña 'Objetivos'.

Respondido el 06 de enero de 11 a las 04:01

Solo para agregar a esto, porque también recibí este error. Revisar todas estas respuestas parece aplicarse a trabajar con la interfaz de usuario y el guión gráfico. Sé que el póster original parecía estar funcionando con la interfaz de usuario, pero al buscar las posibles razones de este error, la mayoría de las preguntas conducen a esta pregunta y las otras se cierran como duplicadas o simplemente tienen problemas para conectar cosas en un guión gráfico, así que lo haré agregue mi solución.

Estaba trabajando en la codificación de un servicio web en Swift 2. Había creado todos los objetos proxy y códigos auxiliares necesarios. Mientras recorría el XML devuelto, estaba instanciando dinámicamente mis objetos, todos los cuales provenían de NSObject y utilizando setValue:forKey en ellos. Cada vez setValue:forKey intentó establecer una propiedad que explotó con este error.

Tenía una declaración de cambio para cada tipo con el que estaba tratando (p. Ej. Bool?, CShort?, String?) y para cada nodo XML pasé y verifiqué cuál era el tipo en el objeto y luego convertí el valor a ese tipo e intenté configurarlo con setValue:forKey.

Eventualmente comencé a comentar todos estos setValue:forKey líneas y encontré que mi default cambiar caso de declaración funcionó para String?.

Finalmente me di cuenta de que tu no puedes utilizar tipos rápidos opcionales con setValue:forKey a menos que tengan un mapeo directo a un tipo Objective-C como String? or NSNumber?. Terminé cambiando todo CShort? tipos a NSNumber? ya que tiene un mapeo directo. Para Bool? en mi caso, estaba bien para mí solo usar Bool e inicializarlo para false. Otros pueden no tener ese lujo.

De todos modos, qué dolor de cabeza fue eso, así que espero que esto ayude a alguien más que tiene un problema similar y sigue siendo redirigido a esta pregunta y se dice a sí mismo: "¡No estoy haciendo nada en la interfaz de usuario!".

Por último, para reiterar una vez más, la codificación de valor-clave no funciona con opcionales. A continuación terminé encontrando algún lugar pero olvido dónde, así que a quien haya publicado esto, me disculpo y le daría crédito si recordara dónde encontré esto, pero me salvó la vida:

No puede usar KVC en una propiedad de Int opcional, porque KVC es Cocoa / Objective-C, y Objective-C no puede ver un Int opcional, no está conectado a Objective-C. Objective-C solo puede ver los tipos que están conectados a Objective-C:

tipos de clase que se derivan de NSObject

tipos de clases que se exponen con @objc

Estructuras rápidas que están puenteadas

Respondido el 26 de enero de 16 a las 15:01

Si está intentando conectar un valor bool Swift a través de enlaces Cocoa, debe exponerlo con la directiva @objc; de lo contrario, obtendrá este error. Esta debería ser la mejor respuesta. - jvarela

"esta clase no es compatible con la codificación de valor clave para la clave" Sé que es un poco tarde, pero mi respuesta es diferente, así que creo que debe publicarse, estaba presionando el segundo controlador de manera incorrecta. Aquí hay una muestra

Manera incorrecta de presionar el controlador

UIViewController* controller = [[UIViewController
 alloc]initWithNibName:@"TempViewController" bundle:nil];
         [self.navigationController pushViewController:controller animated:true];

Forma correcta

TempViewController* controller = [[TempViewController
 alloc]initWithNibName:@"TempViewController" bundle:nil];
         [self.navigationController pushViewController:controller animated:true];

No encontré ninguna respuesta como la anterior, por lo que puede ayudar a alguien que tenga el mismo problema

Respondido el 20 de Septiembre de 16 a las 14:09

Ese podría ser el caso de hacer referencia a un componente de la interfaz Xib al que ha cambiado de nombre o eliminado. La referenciación funciona para mí.

Respondido 11 Jul 12, 11:07

Acabo de tener este problema en mi proyecto duplicado y lo resolví marcando 2 lugares:

1- Asegúrese de tener el archivo .m en la lista -> Proyecto - Fases de compilación - Fuentes de compilación
2- Después de eso, vaya al constructor de interfaces (probablemente este es un error solo con IB) y desvincule todas las propiedades, etiquetas, imágenes, etc ... Luego vuelva a vincular todo. Me di cuenta de que eliminé un atributo, pero aún estaba vinculado en IB.

Espero que funcione para algunos.

Respondido 23 Oct 12, 10:10

Otro problema "no compatible" que encontré fue cuando logré tener dos copias de una clase por alguna razón.

Estaba agregando claves a la copia incorrecta. Interface Builder todavía vio las claves y me permitió conectarme a ellas, pero en tiempo de ejecución estaba usando la otra copia de la clase que no tenía las nuevas claves.

Para encontrar cuál era la copia "correcta" utilicé el cmd-clic de XCode en el nombre de la clase en otro lugar para saltar a la copia correcta, luego eliminé las copias malas no utilizadas (después de traer primero mis ediciones de la copia no utilizada).

Moraleja de la historia: los archivos de clase duplicados son malos.

Respondido 21 ago 10, 15:08

¡Este error es otra cosa!

Así es como lo arreglé. Estoy usando xcode versión 6.1.1 y usando swift. Recibí este error cada vez que mi aplicación intentó realizar una transición para saltar a la siguiente pantalla. Aquí lo que hice.

  1. Verificó que el botón estaba conectado a la acción correcta (este no era el problema, pero aún es bueno verificarlo)
  2. Compruebe que el botón no tenga acciones o salidas adicionales que pueda haber creado por error. (Este no fue el problema, pero es bueno comprobarlo)
  3. Verifique los registros y asegúrese de que todos los botones en la PANTALLA SIGUIENTE tengan las acciones correctas, y si hay alguna secuencia, asegúrese de que tengan un identificador único. (Este era el problema)
    • Uno de los segues no tenía un identificador único.
    • Uno de los botones tenía una acción y dos salidas que creé por error.
    • Elimine los puntos de venta adicionales y asegúrese de que los pasos a la siguiente pantalla tengan identificadores únicos.

Aclamaciones,

Respondido 22 Feb 15, 06:02

Tuve el mismo síntoma. La causa principal fue que la "Membresía de destino" de mi archivo de origen no se estableció en el destino correcto. Supongo que eso significa que mi clase no se compilará ni se incluirá en mi aplicación.

Para corregirlo:

  1. Resalte su archivo .m.
  2. En el panel derecho, seleccione el Inspector de archivos.
  3. En la sección "Membresía de destino", asegúrese de que esté marcado el destino de compilación adecuado.

Espero que esto ayude a alguien.

Respondido el 24 de Septiembre de 14 a las 22:09

En mi caso. No tenía salidas faltantes en los archivos xib después de la fusión.

Shift + Comando + K

resolvió mi problema. Limpié mi proyecto y lo reconstruí.

Respondido 02 Oct 15, 10:10

Si tiene una subclase personalizada de UIViewController con IBOutlets que está causando problemas, el único conjunto de pasos que encontré para deshacerme del error fue

.1 Cambiar la clase a UIViewController

.2 Desconecte todos los tomacorrientes (ahora todos tendrán el triángulo de advertencia amarillo); puede ser suficiente con desconectar los tomacorrientes problemáticos.

.3 Realice todos los pasos estándar: ↑ ⌘K, elimine los datos derivados (, tapetes de oración, cuentas de preocupación)

.4 Inicie la aplicación: vaya a la escena problemática.

.5 Cierra la aplicación, vuelve a Interface Builder y cambia la clase a tu nombre de clase personalizado.

.6 Vuelva a conectar sus enchufes.

Inicie la aplicación y esto normalmente habrá resuelto los problemas de cumplimiento de valores clave.

Respondido 07 Jul 16, 14:07

Esto funcionó al copiar y pegar una escena en el editor de Storyboard. - Mizmor

En mi caso, esto fue causado por hacer referencia al Nib incorrecto:

BMTester *viewController = [[BMTester alloc] initWithNibName:@"WrongNibName" bundle:nil];

contestado el 14 de mayo de 14 a las 14:05

Me sucede cuando cambio el nombre de la clase del controlador de vista y olvido que el nombre de la punta también debe cambiar. Dado que el nombre de la punta es solo una cadena, no hay ningún error de compilador. - Kris

Recibía este error con los guiones gráficos. La solución anterior no parecía ser el problema, así que terminé eliminando el controlador de vista y volviéndolo a agregar (y, por supuesto, volviendo a conectar el segue y reasignando la clase), lo que lo solucionó. No sé qué era realmente, pero había cambiado el nombre de la clase de controlador de vista asociado poco antes de que esto comenzara, así que tal vez eso había manchado algo.

Respondido 28 Oct 11, 04:10

Recibí este error nuevamente. Esta vez creé un nuevo controlador de vista de tabla vacía con mi clase asignada, dejando el que no funcionaba solo, y moví la transición a él. Esto funcionó. Luego copié lentamente todos los elementos de la vista hasta que volvieron a fallar. Esta vez, el problema resultó ser que había asignado algunos "Atributos de tiempo de ejecución definidos por el usuario" para un selector (estaba pensando que podría usarlos para inicializar el selector para no tener que hacerlo en código, no tengo idea de si eso es posible ). Eliminar eso solucionó el problema. Este error es realmente horrible, ¡espero que se mejore en una versión futura! - Simétrico

Tengo el mismo problema. Lo hice reiniciando el simulador. Eliminar y agregar control de botón. y finalmente hizo una limpieza. :) Gracias al desbordamiento de la pila. De alguna manera mi código se volvió correcto y comenzó a funcionar.

Respondido 01 Feb 12, 10:02

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.