Вызовите веб-сервис повторно, цель c - PullRequest
2 голосов
/ 12 января 2012

У меня есть веб-сервис, который каждый раз возвращает 20 результатов (это ограничение поставщика услуг).Я хочу повторять эту услугу 10-20 раз и каждый раз обновлять свой интерфейс.Есть ли лучшая практика для этой ситуации?Я не хочу блокировать пользовательский интерфейс при вызове сервера.Это вызывает проблемы, если пользователь хочет выполнять действия во время выполнения действия (например, переход от текущей страницы) Спасибо !!!

Ответы [ 2 ]

4 голосов
/ 12 января 2012

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

Мы делаем вышеупомянутое (то есть переход с фонового потока на основнойнить) потому что не рекомендуется обновлять пользовательский интерфейс в фоновом режиме.

Вы можете позвонить вам в качестве фонового веб-сервиса, используя

[self performSelectorInBackground:@selector(MyWebService) withObject:nil];//you can pass any object if you have

и вернутьсяв главном потоке, когда фоновое задание закончено, вы можете сделать .. [self performSelectorOnMainThread:@selector(myMainFunction) withObject:nil waitUntilDone:YES];

вы также можете изменить последний параметр, т.е. waitUntilDone:No.Таким образом, пользователю не придется ждать обновления пользовательского интерфейса.они могут выполнять свою задачу.

вы можете использовать NSTimer для периодического вызова вашего веб-сервиса.

надеюсь, что помогло:)

0 голосов
/ 12 января 2012

Это зависит от того, как вы хотите отобразить информацию.

Если вы используете асинхронное соединение (на мой взгляд, более эффективно, чем вызов синхронного соединения в фоновом режиме) и его делегат, он долженне блокировать пользовательский интерфейс:

- (void)loadData {
    NSString *urlString = @"http://www.stackoverflow.com";
    NSURL *url = [NSURL URLWithString:urlString];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    [NSURLConnection connectionWithRequest:request delegate:self];
}

// delegate methods
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
    // clear out or intialize instance data variable
    [myData setLength:0];
}


- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
    [myData appendData:data];
}


- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
    // convert data to whatever it's supposed to be (for example, array)
    NSString *dataString = [[NSString alloc] initWithData:myData encoding:NSUTF8StringEncoding];

    NSArray *dataArray = [parser parseStringToArray:dataString];

    [myArray addObjectsFromArray:dataArray];

    //update tableview either using reload data (instant) or using updates (for smooth animation)
}

Затем можно вызвать метод loadData в конце didFinishLoading: метод для его зацикливания.

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