4

我正在使用 CoreData 开发一个 iOS 应用程序。

我有这两个实体:

店铺

在此处输入图像描述

类别

在此处输入图像描述

我正在尝试category.nameShop实体访问,但出现错误:

- (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];
}

我以这种方式检索Shop实体:

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];

但我得到这个错误:

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

我该如何解决这个错误?

4

1 回答 1

7

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

应该

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

原因:来自键值编码文档

键是标识对象的特定属性的字符串。通常,键对应于接收对象中访问器方法或实例变量的名称。密钥必须使用 ASCII 编码,以小写字母开头,并且不得包含空格。

一些示例键是payee,openingBalance和。transactionsamount

键路径是一串点分隔键,用于指定要遍历的对象属性序列。序列中第一个键的属性是相对于接收者的,并且每个后续键都相对于前一个属性的值进行评估。

例如,关键路径address.street会从接收对象中获取地址属性的值,然后确定相对于地址对象的街道属性。

于 2013-02-07T16:47:00.400 回答