2013-06-27 83 views
0

全部,RestKit - 如何獲取子對象數據?

這一定是一個答案,只有我缺乏,因爲我無法在任何地方找到答案。
我正在學習ios上的RestKit,並最終設法讓它正確使用JSON,並完成關係(woohoo!)。

但是,我無法弄清楚我是如何從父類訪問子類的字段/數據。

例JSON: { 事件{ 名稱: 「健身走」, 說明: 「走在圈子裏」 位置{ 地名: 「你家後院」, 經度:-40.1234, 緯度:38.5678, address:「1600 Penn」 } }

所以我有一個事件類和一個位置類。事件類有一個指向該位置作爲一個成員變量(EventLocation * toLocation)包含的關係:

[RKObjectManager setSharedManager:objectManager]; 

RKEntityMapping * locationMapping = [RKEntityMapping mappingForEntityForName:@"EventLocation" inManagedObjectStore:managedObjectStore]; 
NSDictionary * locationInfo = @{ @"placename" : @"eventPlaceName", @"longitude" : @"longitude", @"latitude" : @"latitude", @"address" : @"eventAddress" }; 
[locationMapping addAttributeMappingsFromDictionary:locationInfo]; 

RKEntityMapping * eventMapping = [RKEntityMapping mappingForEntityForName:@"NYCEvent" inManagedObjectStore:managedObjectStore]; 
NSDictionary * eventInfo = @{ @"_id" : @"event_id", @"name" : @"event_name",@"desc" : @"event_description" }; 
[eventMapping addAttributeMappingsFromDictionary:eventInfo]; 

[eventMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"location" toKeyPath:@"toLocation" withMapping:locationMapping]]; 

RKResponseDescriptor * responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:eventMapping pathPattern:@"/api/search" keyPath:@"events" statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)]; 

而且作爲教程,我願把eventPlaceName文本中的UITableViewCell字幕。

- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath 
{ 
    NSManagedObject *object = [self.fetchedResultsController objectAtIndexPath:indexPath]; 
    cell.textLabel.text = [[object valueForKey:@"event_name"] description]; 


    NSString * lbl = < somehow get the event place name>; 


    cell.detailTextLabel.text = lbl; 
} 

但我不知道如何。請幫幫我?

謝謝! :BP:

回答

0

您可以使用鍵 - 值編碼:

NSManagedObject *object = ... // your Event object 
NSString *placeName = [object valueForKeyPath:@"toLocation.eventPlaceName"]; 

如果你創建了管理對象的子類變得越來越容易(Xcode->編輯 - >創建NSManagedObject子類......)。那麼你可以使用物體的屬性:

Event *event = [self.fetchedResultsController objectAtIndexPath:indexPath]; 
cell.textLabel.text = event.event_name; 
NSString *lbl = event.toLocation.eventPlaceName; 
+0

謝謝!雖然它沒有像廣告中那樣工作。我最終做的是:'Location * location = [event valueForKey:@「toLocation]; NSString * lbl = location.eventPlaceName;' –

+0

@BillyPilgrim:'[event valueForKey:@」toLocation]''和'event.toLocation' *應該*相當。你提出的代碼是否有編譯器錯誤? –

+0

沒有編譯器錯誤 - 運行時。進入雜草,發生核心數據錯誤。 「發生嚴重錯誤」或類似的情況 –