2012-04-11 5 views
3

Ich bin neu in RestKit. Ich versuche, eine Viele-zu-Viele-Beziehung zwischen Entitäten Space und User abzubilden. Nehmen Sie für diese Frage an, dass alle Space-Objekte in dem Core Data-Speicher bereits korrekt sind.RestKit viele-zu-viele mit Core Data: es funktioniert, aber mache ich es richtig?

In der REST-API kann ich einen einzelnen Aufruf ausführen, um alle Benutzer für einen bestimmten Speicherplatz abzurufen. Zunächst einmal, wenn ich mein Netzwerk fetching Klasse initialisieren, habe ich eine Zuordnung geeignet für das Parsen eine Liste der Benutzer nach oben:

RKManagedObjectMapping *teamMapping = [RKManagedObjectMapping mappingForEntity:[NSEntityDescription entityForName:@"User" inManagedObjectContext:self.manager.objectStore.primaryManagedObjectContext] inManagedObjectStore:self.manager.objectStore]; 

[teamMapping mapKeyPath:@"id" toAttribute:@"userID"]; 
[teamMapping mapKeyPath:@"name" toAttribute:@"name"]; 
teamMapping.primaryKeyAttribute = @"userID"; 
[self.manager.mappingProvider setMapping:teamMapping forKeyPath:@"users.user"]; 

Dann die Links für die Benutzer auf die Räume zu füllen, ich dies tun:

Das heißt, ich manuell hinzufügen die Raum-> Benutzer-Verknüpfung basierend auf dem zurückgegebenen Array von Objekten.

Ist das der richtige Weg? Es scheint gut zu funktionieren, aber ich mache mir Sorgen, dass mir ein Trick fehlt, wenn es darum geht, dass RestKit Dinge automatisch erledigt.

Die zurückgegebene XML für die betreffende Datei sieht aus wie

<users type="array"> 
<user> 
<id>aPrimaryKey</id> 
<login>loginName</login> 
<login_name warning="deprecated">loginName</login_name> 
<name>Real Name</name> 
</user> 

So gibt es nichts in der zurückgegebenen Datei ist es, den Raum, um anzuzeigen, dass ich versuche zu verknüpfen: Ich führte, dass in der URL I angefordert, aber es gibt nichts in dem zurückgesandten Dokument darüber, weshalb ich diese blockbasierte Lösung gefunden habe.

Für alle RestKit Benutzer, sieht dies wie eine akzeptable Möglichkeit aus, um viele-zu-viele Links zu bilden?

Antwort

1

Wenn es funktioniert, ist es in Ordnung?

Sie könnten über ein Space-benutzerdefiniertes ManagedObject nachdenken. Habe es auf die RKObjectLoaderDelegate reagieren lassen.

Dann, wenn Sie die Antwort erhalten, können Sie die loadAtResourcePath auslösen aus seinen objectLoader:didLoadObject:(id)object oder objectLoader:didLoadObjectDictionary: Methoden.

Sie könnten Ihre Space-Klasse auch veranlassen, auf die Delegierten von User zu antworten und sie dann an ihren Platz zu binden?

Es könnte besser sein, aber das würde davon abhängen, was Sie erreichen wollen. Denkanstoß sowieso. :)

+0

Ist es in Ordnung, wenn das Modellobjekt Web-Service-Anfragen auslöst? Das scheint ein bisschen so zu sein, als würde MVC mich verletzen. Definitiv eine Überlegung. Kennen Sie Beispiele oder Links zu den RestKit-Dokumenten, die Viele-zu-Viele-Beziehungen mit Core Data handhaben? –

+0

Ich weiß was du meinst. Ich habe mit Klassen wie GetSpace begonnen und die Web-Service-Arbeit gemacht, aber als ich daran arbeitete, fand ich heraus, dass die Web-Service-Sachen besser in den Superklassen der Daten, mit denen ich zu tun hatte, lagen. Also endete ich mit einer Superklasse BasePostData, und wenn ich etwas Spezielles für eine Klasse machte (wie zum Beispiel das Verknüpfen in einer Beziehung wie dein Beispiel), dann konnte ich das in der Unterklasse tun. Ich hoffe das macht Sinn. –

+0

Kennen Sie Beispiele oder Links zu den RestKit-Dokumenten, die Viele-zu-Viele-Beziehungen mit Core Data verarbeiten? - Ich nehme an, Sie meinen mit Zuordnungen zwischen ihnen in einer JSON-Anfrage, nein, und nicht sicher, wie Sie das tun würden. Wenn es sich um separate Anfragen handelt, könnte man sie im Code verlinken ... aber keine Beispiele, tut mir leid. –

Verwandte Themen