извлекать данные JSON асинхронно - PullRequest
0 голосов
/ 13 августа 2011

Я хочу получать данные JSON асинхронно.Данные настроены таким образом, что один запрос принесет только 8 записей.Мне нужно отправлять запросы повторно, пока ответ не станет пустым или не вернет менее 8 записей.

В настоящее время у меня есть эти методы в классе myviewcontroller.m:

(void)myCallback:(id)sender {

    MyDataRequest *objMyDataRequest = [[[MyDataRequest alloc] init] autorelease];
    objMyDataRequest.myRequiredVariableToGetAuthTokenDataResponse = classOfMyCallBack.someVariable;

    // Initiate getAuthToken request
    [objWishListRequest initiateGetAuthTokenRequest:self requestSelector:@selector(getAuthTokenDataResponse:)];
}

Теперь вот определение getAuthTokenDataResponse:

(void) getAuthTokenDataResponse:(NSData *)data {

    NSString *stringResponse = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
    SBJsonParser *parser=[[SBJsonParser alloc]init];
    NSDictionary *objDictionaryForStringResponse = [parser objectWithString:stringResponse];
    [stringResponse release];
    [parser release];
    MyListRequest *objMyListRequest = [[[MyListRequest alloc] init] autorelease];
    objMyListRequest.myRequiredValueToGetMyDataResponse = [objDictionaryForStringResponse objectForKey:@"Data"]; 

    // Initiate GetMyDataResponse request
    [objMyListRequest initiateGetMyDataRequest:self requestSelector:@selector(getMyDataResponse:)]; 

}


(void) getMyDataResponse:(NSData *)data {

    NSString *stringResponse = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
    SBJsonParser *parser=[[SBJsonParser alloc]init];
    NSDictionary *objGetMyDataRootDictionary = [parser objectWithString:stringResponse];
    [stringResponse release];
    [parser release];
    NSDictionary *dataElements=[objGetMyDataRootDictionary objectForKey:@"Data"];
    Wish *objMyData; 

    for (NSDictionary* objGetMyDataRootDictionary in dataElements) {
        objMyData = [[Wish alloc]init];
        //add different elements from dataElements into member variables of object objWish
        [self.myDataArray addObject:objMyData];
        [objMyData release];
    }
    [self.myDataTableView reloadData];
}

Этот метод находится в классе MyDataRequest:

(void)initiateGetMyDataRequest:(id)requestDelegate requestSelector:(SEL)requestSelector{

    // Set the delegate and selector
    self.delegate = requestDelegate;
    self.callback = requestSelector;

    NSString* unescapedUrlString = [NSString stringWithFormat:@"http://test.mytesturl.com/core.svc/alldata/My/get/All/?token=%@&search=&page=1",myRequiredtokenparameter];  
    [self request:url];
}

Мне нужно отправить несколько запросов на один и тот же URL (с другим значением параметра, т.е. значением номера страницы), чтобы получить результаты.Как я могу добиться этого с учетом приведенного выше сценария?Вызовы должны быть асинхронными.

Как мне сделать фактический поток между всеми этими вызовами?Как я могу получить данные "всех страниц" асинхронно?

1 Ответ

0 голосов
/ 13 августа 2011

Я думаю, вы ищете очередь операций. Я использую ASIHTTPRequests в своих приложениях, и они работают.

Если вы хотите использовать эту библиотеку, вот ссылка, как ее использовать: Показать UIActivityIndicatorView при загрузке NSString из Web

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...