2012-11-05 7 views
5

Ich habe eine iOS Restkit bezogene Frage. Ich habe Eltern-Kind-Beziehungsdaten, die von einem Remote-Server kommen, und mappe diese Objekte auf ein Objekt mit Restkit. Das Problem, das ich gerade habe, ist jede Anfrage an den Server, die "Kind" -Beziehung immer zu löschen und sie durch die neuen Daten zu ersetzen, die vom Server kommen. Gibt es eine Möglichkeit, diese zu vermeiden und stattdessen das neue Kind anzuhängen?Restkit-zu-viele-Beziehung anhängen, um Set zu setzen, anstatt einen neuen Satz zu setzen

Zum Beispiel: Ich habe eine klassische Kategorie -> Produkte Beziehung.

{"categories": [ 
    { 
     "cat_id": "1", 
     "cat_title": "category 1", 
     "cat_tag": 1, 
     "product": [ 
      { 
       "prod_id": "1", 
       "prod_name": "product 1", 
       "prod_tag": 1 
      }, 
      { 
       "prod_id": "2", 
       "prod_name": "product 2", 
       "prod_tag": 1 
      } 
     ] 
    } 
] } 

Und das funktioniert gut und alles ist richtig mit der Beziehung auf dem Coredata gespeichert. Aber wenn ich eine weitere Anfrage an den Server und haben eine neue Antwort:

{"categories": [ 
    { 
     "cat_id": "1", 
     "cat_title": "category 1", 
     "cat_tag": 1, 
     "product": [ 
      { 
       "prod_id": "3", 
       "prod_name": "product 3", 
       "prod_tag": 1 
      }, 
      { 
       "prod_id": "4", 
       "prod_name": "product 4", 
       "prod_tag": 1 
      } 
     ] 
    } 
] } 

werde ich Produkt 3 und Produkt 4 Produkt 1 und Produkt 2 in der Datenbank ersetzen. Ich bin sicher, dass ich die Beziehung und den Primärschlüssel richtig eingerichtet habe. (Sowohl cat_id als auch prod_id sind als Primärschlüssel eingestellt).

durch den internen Rahmen des RestKit untersucht haben, bemerkte ich, dass um line 576 in der RKObjectMappingOperation Klasse gibt

RKLogTrace(@"Mapped NSSet relationship object from keyPath '%@' to 
      '%@'. Value: %@", relationshipMapping.sourceKeyPath, 
      relationshipMapping.destinationKeyPath, destinationObject); 

NSMutableSet *destinationSet = [self.destinationObject 
         mutableSetValueForKey:relationshipMapping.destinationKeyPath]; 
[destinationSet setSet:destinationObject]; 

So ist Ich denke, das ist einfach nur

[destinationSet setSet:destinationObject];

ändern

bis

[destinationSet addObjectsFromArray:[destinationObject allObjects]]

Aber ich fragte mich, ob es einen besseren Weg gibt, es zu tun?

Cheers,

Antwort