2013-07-13 8 views
5

Nehmen wir an, ich habe ein Core Data Modell mit AFIncrementalStore, und ich habe mehrere REST-API-Endpunkte zum Abrufen einer Liste von Objekten dieses Modells. Ich kann -requestForFetchRequest:withContext: in AFHTTPClient wie so außer Kraft setzen:Wie kann ich mehrere URL-Anfragen haben, um einen einzelnen Entitätstyp in AFIncrementalStore abzurufen?

- (NSURLRequest *)requestForFetchRequest:(NSFetchRequest *)fetchRequest 
         withContext:(NSManagedObjectContext *)context { 

    NSMutableURLRequest *mutableURLRequest = nil; 
    if ([fetchRequest.entityName isEqualToString:@"Post"]) { 
     mutableURLRequest = [self requestWithMethod:@"GET" path:@"/posts/foo" parameters:nil]; 
    } 
    return mutableURLRequest; 
} 

In diesem Code-Schnipsel, ich abrufen Post Objekte /posts/foo, aber ich brauche auch einen anderen Satz von /posts/bar abzurufen.

Wie kann ich das tun? Die einzige Lösung, die ich sehe, ist, zwei Modelle zu machen: eine für foo und eine für bar, aber sich selbst zu wiederholen ist lahm, und es gibt möglicherweise viel mehr API-Endpunkte, die Post Objekte für mich erhalten, die ich unterstützen muss. Gibt es einen anderen Ansatz, den ich vermisse?

+1

Wie entscheiden Sie, ob Sie '/ posts/foo' oder'/posts/bar' möchten? Zum Beispiel, sind diese Post-Objekte von verschiedenen Benutzern? Können Sie 'fetchRequest' überprüfen, um festzustellen, ob Sie gerade nach' foo' oder 'bar' Posts suchen? –

+0

In meinem Fall hat die API, mit der ich spreche, einen Bildschirm, auf dem ich sowohl Foo- als auch Bar-Posts anfordern muss, um sie in einer einzigen Tabellenansicht aufzulisten. Mein Post-Modell hat eine Eigenschaft, die angibt, um welchen Typ es sich handelt, also könnte ich vielleicht 'fetchRequest.predicate.predicateFormat' betrachten und so bestimmen? – greenisus

+0

Ja, es klingt wie in Ihrem Fall, Sie müssen 'fetchRequest' näher betrachten, als nur auf 'entityName' zu ​​schauen. Abhängig von Ihrem Datenmodell können Sie auch 'fetchRequest.propertiesToFetch' oder möglicherweise andere Dinge betrachten. Sie müssen immer noch zwei Anfragen senden, also stellen Sie sicher, dass es den Unterschied erkennen lässt. –

Antwort

2

Sie müssen fetchRequest näher untersuchen als nur entityName. Sie können auch fetchRequest.propertiesToFetch oder möglicherweise andere Dinge abhängig von Ihrem Datenmodell betrachten. Sie müssen immer noch zwei Anfragen senden, stellen Sie also sicher, dass Ihre AFNetworking-Unterklasse den Unterschied erkennen kann.

Auch: es klingt wie Ihre requestForFetchRequest:withContext: Methode könnte wirklich groß werden. Vielleicht möchten Sie ein allgemeineres Muster in Betracht ziehen, in dem Sie Ihre Unterklasse erhalten, und Sie bitten, eine Abrufanforderung zurückzugeben.

Verwandte Themen