la entidad Shop no cumple con la encoding de valor key para la key "category.name"

Estoy desarrollando una aplicación de iOS con CoreData.

Tengo estas dos entidades:

tienda

introduzca la descripción de la imagen aquí

Categoría

introduzca la descripción de la imagen aquí

Estoy intentando acceder category.name de la entidad Shop , pero me sale un error:

 - (void)updateDetails:(NSManagedObject *)shop { NSLog(@"updateDetails: %@", shop); if (shop == nil) return; self.nameLabel.text = [[shop valueForKey:@"name"] description]; self.categoryLabel.text = [[shop valueForKey:@"category.name"] description]; self.addressLabel.text = [[shop valueForKey:@"address"] description]; self.telephoneLabel.text = [[shop valueForKey:@"telephone"] description]; NSNumberFormatter* f = [[NSNumberFormatter alloc] init]; [f setNumberStyle:NSNumberFormatterDecimalStyle]; NSNumber* acceptRate = [f numberFromString:[[shop valueForKey:@"acceptRate"] description]]; _ratingControl.rating = [acceptRate unsignedIntValue]; } 

Recupero entidades de Shop esta manera:

 NSManagedObjectContext *context = [self managedObjectContext]; NSEntityDescription *entity = [NSEntityDescription entityForName:@"Shop" inManagedObjectContext:context]; NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; [fetchRequest setEntity:entity]; NSArray *results = [context executeFetchRequest:fetchRequest error:nil]; 

Pero recibo este error:

'[<NSManagedObject 0x1cdb4890> valueForUndefinedKey:]: the entity Shop is not key value coding-compliant for the key "category.name".'

¿Cómo puedo resolver este error?

self.categoryLabel.text = [[shop valueForKey:@"category.name"] description];

debiera ser

self.categoryLabel.text = [[shop valueForKeyPath:@"category.name"] description];

Motivo : desde la documentation de encoding de valor key

Una key es una cadena que identifica una propiedad específica de un object. Normalmente, una key corresponde al nombre de un método de acceso o variable de instancia en el object receptor. Las keys deben usar la encoding ASCII, comenzar con una letra minúscula y no contener espacios en blanco.

Algunas keys de ejemplo serían el payee , openingBalance , transactions y amount .

Una ruta key es una cadena de keys separadas por puntos que se utiliza para especificar una secuencia de properties de object para recorrer. La propiedad de la primera key en la secuencia es relativa al receptor, y cada key posterior se evalúa en relación con el valor de la propiedad anterior.

Por ejemplo, la ruta de acceso a la address.street obtendría el valor de la propiedad de dirección del object que recibe y, a continuación, determinará la propiedad de la calle en relación con el object de la dirección.