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?
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? –
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
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. –