2013-07-13 16 views
5

Supponiamo di avere un modello Core Data che utilizza AFIncrementalStore e che dispongo di più endpoint REST API per il recupero di un elenco di oggetti di quel modello. Posso ignorare -requestForFetchRequest:withContext: in AFHTTPClient in questo modo:Come posso avere più richieste URL per recuperare un singolo tipo di entità in AFIncrementalStore?

- (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 questo frammento di codice, posso recuperare Post oggetti in /posts/foo, ma ho anche bisogno di recuperare un altro set da /posts/bar.

Come posso fare questo? L'unica soluzione che vedo è quella di creare due modelli: uno per foo e uno per bar, ma la ripetizione di te è lecita e potrebbero esserci molti più endpoint API che ottengono gli oggetti Post per me che devo supportare. C'è qualche altro approccio che mi manca?

+1

Come si decide se si desidera '/ posts/foo' o'/posts/bar'? Ad esempio, sono quegli oggetti Post di diversi utenti? Puoi controllare 'fetchRequest' per determinare se stai cercando i messaggi' foo' o 'bar'? –

+0

Nel mio caso, l'API con cui sto parlando ha una schermata in cui ho bisogno di richiedere sia Foo che Bar Posts per elencare in una singola tabella. Il mio modello di post ha una proprietà che indica quale tipo è, quindi forse potrei dare un'occhiata a 'fetchRequest.predicate.predicateFormat' e determinare in questo modo? – greenisus

+0

Sì, sembra che nel tuo caso, è necessario controllare 'fetchRequest' più da vicino rispetto a guardare' entityName'. Puoi anche guardare 'fetchRequest.propertiesToFetch' o forse altre cose a seconda del tuo modello di dati. Dovrai comunque inviare due richieste, quindi assicurati che possa dire la differenza. –

risposta

2

È necessario ispezionare lo fetchRequest più da vicino rispetto a entityName. Puoi anche guardare fetchRequest.propertiesToFetch o forse altre cose a seconda del modello di dati. Dovrai comunque inviare due richieste, quindi assicurati che la sottoclasse di AFNetworking sia in grado di distinguere.

Inoltre: sembra che il tuo metodo requestForFetchRequest:withContext: possa diventare davvero grande. È possibile prendere in considerazione un modello più generico in cui si ottiene la sottoclasse NSManagedObject e chiedere di restituire una richiesta di recupero.

Problemi correlati