2011-10-14 169 views
5

我使用coredata和restkit來映射數據。Restkit複雜的對象映射,嵌套對象數組,在覈心數據

這裏是JSON響應爲getsales調用

{ "success":true, 
"sales" : [ 
      { 
     "brands" :[ 
     {"id":"637", "name":"XYZ"}, 
     {"id":"638", "name":"abc"} 
     ] 
     "end_date" = "2011-10-14 12:00:00", 
     "id" = 3794, 
     "image" = "http://dummy.something.com.jpg", 
     "name" = "test", 
    }, 
     { 
     "brands" =[ 
     {"id":"640", "name":"abc"} 
     ], 
     "end_date" = "2011-10-14 12:00:00", 
     "id" = 3766, 
     "image" = "http://dummy.something.com.jpg", 
     "name" = "text2", 
    }, 
     { 
     "brands" =[ 
     {"id":"641", "name":"XYZ"}, 
     {"id":"642", "name":"abc"}, 
     {"id":"643", "name":"def"} 
     ], 
     "end_date" = "2011-11-06 12:00:00", 
     "id" = 3798, 
     "image" = "http://dummy.something.com.jpg", 
     "name" = "test3", 
    } 
] 
} 

我有

@interface Sale : NSManagedObject{ 
} 
@property (nonatomic, retain) NSNumber * ID; 
@property (nonatomic, retain) NSString * name; 
@property (nonatomic, retain) NSDate * endDate; 
@property (nonatomic, retain) NSString * imageUrl; 

@implementation Sale 

@dynamic ID; 
@dynamic name; 
@dynamic startDate; 
@dynamic endDate; 
@dynamic imageUrl; 

我試圖映射響應如下

- (void)getSales{ 
    RKObjectManager* objectManager = [RKObjectManager  objectManagerWithBaseURL:@"http://baseurl.com"]; 
    RKManagedObjectStore* objectStore = [RKManagedObjectStore  objectStoreWithStoreFilename:@"base.sqlite"]; 
objectManager.objectStore = objectStore; 


RKManagedObjectMapping* saleMapping = [RKManagedObjectMapping mappingForClass:[Sale class]]; 
    [saleMapping mapKeyPathsToAttributes: 
    @"id", @"ID", 
    @"name", @"name", 
    @"start_date",@"startDate", 
    @"end_date", @"endDate", 
    @"image", @"imageUrl", 
    nil]; 

    saleMapping.primaryKeyAttribute = @"ID"; 
    [[RKObjectManager sharedManager].mappingProvider setMapping:saleMapping forKeyPath:@"sales"]; 

[[RKObjectManager sharedManager] loadObjectsAtResourcePath:@"/getSales/" objectMapping:saleMapping delegate:self]; 
} 

基本上我有一個嵌套的數組對象,映射這些對象的正確方法是什麼? 以及Sale類別必須存儲哪些品牌的品牌列表?

任何幫助表示讚賞,我已經浪費了太多的時間來解決這個問題。

回答

10

嘗試增加:

[saleMapping mapKeyPath:@"brands" toRelationship:@"brands" withMapping:[BrandObject objectMapping]];

其中[BrandObject objectMapping]爲BrandObject的映射(以idname性質的NSManagedObject)。

基本上,您可以使用mapKeyPath:toRelationship:withMapping:嵌套映射。你還需要一個屬性添加到您的銷售對象和類型NSSet

@property (nonatomic, retain) NSSet *brands;

最後,在銷售對象的實現,添加:@dynamic brands旁邊的其他@dynamic語句。

希望這會有所幫助!謝謝。

+1

你可以(或任何人)詳細解釋一下最後一步,「添加一個動態屬性到你的銷售對象名爲NSSet *品牌」嗎?那是我掛斷的地方。 –

+0

我已更新關於NSSet屬性的更多詳細信息。謝謝! –