2011-03-28 16 views
20

así que tengo esteesta clase no es valor de la clave de codificación compatible para la clave GivenName

- (void)loadView { 
BOOL success; 
NSFileManager *fileManager = [NSFileManager defaultManager]; 
NSString* documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
NSString* databasePath = [documentsPath stringByAppendingPathComponent:@"ProxDeals.db"]; 
NSError *error; 

BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:databasePath]; 
if (fileExists==TRUE) { 
    [[NSBundle mainBundle] loadNibNamed:@"ProxDealsViewController" owner:self options:nil]; 
} 
else { 
    NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"ProxDeals.db"]; 
    NSLog(@"%@",defaultDBPath); 
    success = [fileManager copyItemAtPath:defaultDBPath toPath:databasePath error:&error]; 
    if (!success) { 
     NSAssert1(0, @"Failed to create writable database file with message '%@/.", [error localizedDescription]); 
    } 
    [[NSBundle mainBundle] loadNibNamed:@"UserRegistration" owner:self options:nil]; 
} 

}

y este error:

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

Sé que no lo hago hacer algo wright en la inicialización de la plumilla UserRegistration, pero no sé cómo solucionarlo.

+0

Funcionó hasta que comencé a conectar IBOutlets en la segunda clase. – flaviusilaghi

Respuesta

84

Esto generalmente significa que algo está intentando acceder a @property "givenName".

si estuviera haciendo algo con IB, la causa habitual es que o bien:

  • eliminó dicha propiedad de la clase, pero no se haya eliminado las conexiones en IB todavía
  • O: tiene un objeto Propietario de archivo establecido en la clase incorrecta (marque las propiedades, diferentes según la versión de xcode que esté utilizando) para encontrar el nombre de clase configurado como. Probablemente copie/pegue un archivo NIB y no lo haya hecho no cambie este campo en el NIB), y ha conectado un salida para esa clase, pero su propietario de archivo real es algo diferente
+1

Tuve un problema diferente que dio el error y sus pautas generales claras me ayudaron a encontrar la solución. Una conexión sobrante estaba ensuciando las cosas. –

+16

Apple realmente debería considerar mejorar sus mensajes de error. – devios1

+0

gracias, me salvó el tiempo: D –

4

Este problema suele aparecer cuando hay un desajuste entre los IBOutlet s en el archivo de la SEMILLA y el archivo .h.

Asegúrese de no tener ninguna conexión rota en IB (generalmente aparecen con amarillo y un signo de advertencia junto a ellos). Además, limpie el proyecto (Producto> Limpiar en XCode 4) antes de compilar, puede que tenga un archivo obsoleto compilado.

+0

No tengo ninguna conexión rota en IB. – flaviusilaghi

+0

Me las arreglé para que funcione. Acabo de declarar los IBOutlets en la clase principal y configuré el FileOwner en la misma clase. Gracias por la ayuda. – flaviusilaghi

3

También me sucedió después de haber eliminado un elemento de IU del archivo de punta y la IBOutlet correspondiente del controlador de vista. La limpieza del proyecto tampoco lo resolvió.

Por lo tanto, eliminé las carpetas dentro de la carpeta DerivedData que está creada por Xcode 4. ¡Entonces funcionó!

1

A veces, es muy molesto eliminar la aplicación del dispositivo/simulador, especialmente cuando ha guardado los datos y la configuración.

Para resolver este problema, para cada ViewController para el que ha quitado el .xib, archivo, agregue el siguiente código:

-(NSString*) nibName 
{ 
    return nil; 
} 
1

Si tiene diferentes archivos storybord y si tiene referencias salida con la creación de puntos de venta fuera de su archivos de encabezado, entonces simplemente elimine las conexiones haciendo clic derecho en el propietario de los archivos.

Archivos propietarios-> Haga clic derecho-> eliminar conexiones de salida no deseadas allí. limpiar y ejecutar su proyecto

Consulte esto para obtener una explicación clara. Esta clase no es un valor clave que cumple con la codificación para la clave

Cuestiones relacionadas