2013-07-13 18 views
5

Załóżmy, że mam model Core Data z wykorzystaniem AFIncrementalStore i mam wiele punktów końcowych API REST do pobierania listy obiektów tego modelu. Mogę zastąpić -requestForFetchRequest:withContext: w AFHTTPClient tak:Jak mogę mieć wiele żądań URL, aby pobrać pojedynczy typ obiektu w 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; 
} 

W tym fragmencie, odzyskać Post obiektów w /posts/foo, ale również trzeba pobrać inny zestaw z /posts/bar.

Jak mogę to zrobić? Jedyne rozwiązanie, jakie widzę, to zrobić dwa modele: jeden dla foo i jeden dla bar, ale powtarzanie się jest lame, i może być o wiele więcej punktów końcowych API, które dostaną dla mnie Post obiektów, które będę musiał obsługiwać. Czy istnieje inne podejście, którego mi brakuje?

+1

Jak zdecydujesz, czy chcesz '/ posts/foo' lub'/posts/bar'? Na przykład, czy są to obiekty Post przez różnych użytkowników? Czy możesz sprawdzić 'fetchRequest', aby określić, czy aktualnie szukasz wpisów' foo' lub 'bar'? –

+0

W moim przypadku interfejs API, z którym rozmawiam, ma ekran, na którym muszę wysyłać zarówno posty Foo, jak i słupkowe do listy w widoku pojedynczej tabeli. Mój model post ma właściwość wskazującą, który to typ, więc może mógłbym spojrzeć na 'fetchRequest.predicate.predicateFormat' i ustalić w ten sposób? – greenisus

+0

Tak, to brzmi jak w twoim przypadku, musisz sprawdzić 'fetchRequest' bardziej uważnie niż patrząc na' entityName'. Możesz również spojrzeć na 'fetchRequest.propertiesToFetch' lub ewentualnie inne rzeczy w zależności od modelu danych. Nadal będziesz musiał wysłać dwie prośby, więc upewnij się, że może to odróżnić. –

Odpowiedz

2

Należy przeprowadzić dokładniejszą kontrolę fetchRequest niż po prostu patrząc na entityName. Możesz również spojrzeć na fetchRequest.propertiesToFetch lub ewentualnie inne rzeczy w zależności od modelu danych. Nadal będziesz musiał wysłać dwie prośby, więc upewnij się, że twoja podklasa AFNetworking dostrzeże różnicę.

Ponadto: wygląda na to, że twoja metoda requestForFetchRequest:withContext: może stać się naprawdę duża. Możesz rozważyć bardziej ogólny wzór, w którym otrzymasz swoją podklasę i poprosić o zwrócenie żądania pobrania.