2017-07-11 5 views
0

Ich benutze RestKit, um einen API-Aufruf zu machen, aber eine meiner Eigenschaft ist nicht korrekt zugeordnet.RestKit Mapping Array von Objekten

Sagen, ich habe:

// Animal.h 
@interface Animal: NSObject 

@property (nonatomic, strong) NSArray<Fruit*> favoriteFruits; 

@end 

mit Umsetzung:

// Animal.h 
// This class conforms to NSCoding and correctly implements encodeWithCoder and initWithCoder, no problem 

Ich habe auch eine Fruit Klasse mit ähnlichem NSCoding stuff:

// Fruit.h 
@interface Fruit: NSObject 

@property (nonatomic, strong) NSString* name; 

@end 

Hier ist, wie ich meinen Mapping einrichten :

[animalMapping addAttributeMappingsFromDictionary:@{ 
    @"fruits": @"favoriteFruits" 
}]; 

Wenn ich eine GET-Anfrage über RestKit machen, die JSON ich zurück bekommen, ist dies so etwas wie:

{ 
    "fruits": [ 
    { 
     "name": "banana" 
    }, 
    { 
     "name: "apple" 
    } 
    ] 
} 

Der Antrag erfolgreich hergestellt wurde, aber wenn ich überprüfen Sie die Mapping-Ergebnis, die Elemente in favoriteFruits Array in der Animal Klasse sind nicht vom Typ Fruit wie ich erwartet habe. Sie sind vom Typ NSDictionary. Die Werte auf den NSDictionary sind alle richtig ... Ich brauche nur, um sie zu Fruit Objekten automatisch umgewandelt werden ...

nicht sicher, ob dies relevant ist, aber wenn ich versuche, dies im Debugger:

(lldb) po ((Fruit*)myAnimal.favoriteFruits[0]).name 

ich:

error: Execution was interrupted, reason: Attempted to dereference an invalid ObjC Object or send it an unrecognized selector. The process has been returned to the state before expression evaluation.

Vielen Dank für Ihre Hilfe.

Antwort

0

Realisiert habe ich nie eine richtige Beziehung zu der Abbildung hinzugefügt ... Was ich getan haben sollte:

[animalMapping addAttributeMappingsFromDictionary:@{ 
    // Other attributes go here, but not favoriteFruits 
}]; 

Dann fügen Sie die folgenden Zeilen:

RKRelationshipMapping *fruitsRelationship = [RKRelationshipMapping relationshipMappingFromKeyPath:@"fruits" toKeyPath:@"favoriteFruits" withMapping:animalMapping]; 
[candidateMapping addPropertyMapping: fruitsRelationship];