5 Stimmen

Restkit komplexe Objektmapping mit verschachtelten Objektarrays in Core Data

Ich benutze Core Data und RestKit, um Daten abzubilden.

Hier ist die JSON-Antwort für den getSales-Aufruf:

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

Ich habe

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

Ich versuche, die Antwort wie folgt abzubilden:

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

Im Wesentlichen habe ich verschachtelte Arrays von Objekten, wie kann ich diese Objekte korrekt abbilden?? Und welchen Typ von Attribut sollte die Sale-Klasse haben, um die Markenliste zu speichern??

Jede Hilfe wird geschätzt, ich habe bereits zu viel Zeit damit verbracht, dies zu beheben.

10voto

Chris Nolet Punkte 8347

Versuchen Sie hinzuzufügen:

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

wo [BrandObject objectMapping] das Mapping für BrandObject (eine NSManagedObject mit den Eigenschaften id und name) ist.

Sie können im Grunde genommen mapKeyPath:toRelationship:withMapping: verwenden, um Mapping zu verschachteln. Sie müssen auch eine Eigenschaft zu Ihrem Verkaufsobjekt vom Typ NSSet hinzufügen:

@property (nonatomic, retain) NSSet *brands;

Zuletzt fügen Sie in der Implementierung des Verkaufsobjekts hinzu: @dynamic brands neben den anderen @dynamic-Anweisungen.

Hoffentlich hilft Ihnen das! Danke.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X