2011-10-14 163 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属性的更多详细信息。谢谢! –