2011-10-14 24 views
5

sto utilizzando i coredati e il restkit per mappare i dati.Mappaggio di oggetti complessi di restkit, con matrici di oggetti nidificati, in Dati di base

Ecco la risposta JSON per getsales chiamare

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

ho

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

Sto cercando di mappare la risposta come segue

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

array essenzialmente ho nidificate di oggetti, qual è il modo corretto per mappare questi oggetti ?? e che tipo di proprietà dovrebbe la classe di vendita deve memorizzare la lista delle marche ??

Qualsiasi aiuto è apprezzato, ho già perso troppo tempo a sistemarlo.

risposta

10

Prova ad aggiungere:

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

dove [BrandObject objectMapping] è la mappatura per BrandObject (un NSManagedObject con id e name proprietà).

In sostanza è possibile utilizzare il numero mapKeyPath:toRelationship:withMapping: per annidare i mapping. Avrete anche bisogno di aggiungere una proprietà al vostro oggetto di vendita con il tipo NSSet:

@property (nonatomic, retain) NSSet *brands;

Infine, per l'attuazione dell'oggetto Sale, aggiungere: @dynamic brands accanto alle altre dichiarazioni @dynamic.

Spero che questo aiuti! Grazie.

+1

Puoi (o qualcuno) spiegare l'ultimo passaggio, "Aggiungi una proprietà dinamica al tuo oggetto Sale denominata marchi NSSet *" in un po 'più in dettaglio? È lì che sono appeso. –

+0

Ho aggiornato con maggiori dettagli sulla proprietà NSSet. Grazie! –

Problemi correlati