2013-02-07 111 views
4

我正在開發iOS應用程序和CoreData。實體Shop不是密鑰值編碼兼容密鑰「category.name」

我有這兩個實體:

enter image description here

類別

enter image description here

我試圖從訪問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".'

我怎樣才能解決這個問題錯誤?

回答

7

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

應該是

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

原因:從Key Value Coding Documentation

的關鍵是識別對象的特定屬性的字符串。通常,鍵對應於接收對象中的訪問器方法或實例變量的名稱。密鑰必須使用ASCII編碼,以小寫字母開頭,並且不得包含空格。

一些示例密鑰將是payee,openingBalance,transactionsamount

關鍵路徑是一串點分隔的鍵,用於指定要遍歷的對象屬性序列。序列中第一個鍵的屬性是相對於接收者的,並且每個後續鍵都相對於前一個屬性的值進行評估。

例如,關鍵路徑address.street將從接收對象獲取地址屬性的值,然後確定相對於地址對象的街道屬性。

+2

剛剛添加 - 這來自[Key-Value Coding](https://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/KeyValueCoding/Articles/KeyValueCoding.html) – Abizern

+0

@Abizern謝謝!我已經通過添加的鏈接更新了我的答案。 – Gudiya

相關問題