RestKit ActivityIndicator для нескольких запросов - PullRequest
2 голосов
/ 15 ноября 2011

У меня есть IBAction, который вызывается с помощью кнопки в моем приложении для iPad.

Затем IBaction вызывает три разных метода, которые инициируют запрос RestKit.

Каков наилучший способ проверки всех трех запросов на объекты, которые были получены?

Цель состоит в том, чтобы отобразить ActivityIndicator с первым запросом и остановить / скрыть ActivityIndicator с получением объектов для всех трех запросов.

Я новичок в RestKit, поэтому, пожалуйста, прости меня, если это слишком простой вопрос. Я сам пытался найти решение с помощью API RestKit - Документация.

Ответы [ 2 ]

4 голосов
/ 15 ноября 2011

Полагаю, вы используете асинхронные запросы. Одним простым решением может быть проверка в вашем RKObjectLoderDelegate - (void)objectLoader:(RKObjectLoader*)objectLoader didLoadObjects:(NSArray*)objects методе, все ли ваши данные уже загружены.

При инициировании запросов RestKit вы можете добавить «запрос» (называемый userData в RestKit) к запросу и извлечь этот тег позже в обратных вызовах делегата.

Например, вы можете реализовать следующую логику:

Когда вы создаете свои запросы, добавляйте к каждому конкретному пользователю данные:

RKObjectLoader *loader = [[RKObjectManager sharedManager] loadObjectsAtResourcePath:@"/getMyData" objectMapping:mapping delegate:self];     
[loader setUserData:@"FirstRequest"];
...
RKObjectLoader *loader = [[RKObjectManager sharedManager] loadObjectsAtResourcePath:@"/getMyData" objectMapping:mapping delegate:self];     
[loader setUserData:@"ThirdRequest"];

и отметьте теги в didLoadObjects:

- (void)objectLoader:(RKObjectLoader*)objectLoader didLoadObjects:(NSArray*)objects {
    if ([[objectLoader userData] isEqual:@"FirstRequest"]) {
        self.firstRequestData = objects;
    }
    ... //handle the remaining requests
    if (self.firstRequestData && self.secondRequestData && self.thirdRequestData) {
        [self hideMyActivityIndicator];
    }   
 }

Не забывайте обрабатывать ошибки при загрузке запросов.

В качестве альтернативы, если этот подход не будет соответствовать вашему сценарию - вы можете добавлять запросы и управлять ими в отдельной очереди и отслеживать ход выполнения. Если вам понадобится дополнительная информация о втором варианте, просто дайте мне знать.

1 голос
/ 11 января 2013

Существует простой способ: в вашем делегате objectLoader вы можете использовать встроенную функцию objectLoader, например:

- (void)objectLoader:(RKObjectLoader *)objectLoader didLoadObjects:(NSArray *)objects {

    if ([objectLoader wasSentToResourcePath:@"/path1"]) {
       //handle request for /path1  
       //objects are loaded for request1        

    } else if ([objectLoader wasSentToResourcePath:@"/path2"]){
       //handle request for /path2
       //objects are loaded for request2      

    } else if ([objectLoader wasSentToResourcePath:@"/path3"]){
      //handle request for /path3
      //objects are loaded for request3      

   }
}

Это так просто.

...