2011-10-14 9 views
5

estoy usando coredata y restkit para mapear datos.Asignación de objetos compleja de repositorio, con matrices de objetos anidados, en Core Data

aquí es la respuesta JSON para getsales llamar

{ "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", 
    } 
] 
} 

tengo

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

Estoy tratando de mapear la respuesta de la siguiente manera

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

matrices esencialmente he anidados de objetos, ¿cuál es la forma correcta de asignar estos objetos? y qué tipo de propiedad debe tener la clase de venta para almacenar la lista de marcas?

Se agradece cualquier ayuda, ya perdí demasiado tiempo arreglando esto.

Respuesta

10

Trate de añadir:

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

donde [BrandObject objectMapping] es la asignación para BrandObject (un NSManagedObject con id y name propiedades).

Esencialmente puede usar mapKeyPath:toRelationship:withMapping: para las asignaciones de nidos. También tendrá que añadir una propiedad a su objeto de la venta con el tipo NSSet:

@property (nonatomic, retain) NSSet *brands;

Finalmente, en la ejecución del objeto de venta, añadir: @dynamic brands junto a las otras declaraciones @dynamic.

Espero que esto ayude! Gracias.

+1

¿Puede usted (o alguien) explicar el último paso, "Agregar una propiedad dinámica a su objeto de venta denominado marcas NSSet *" con un poco más de detalle? Ahí es donde estoy colgado. –

+0

He actualizado con más detalles acerca de la propiedad NSSet. ¡Gracias! –

Cuestiones relacionadas