В моем приложении iPAD у меня есть 6 UITableView. Чтобы получить данные для каждого из табличных представлений, я вызываю веб-службу с помощью NSURLConnection, анализирую XML-файл, полученный от веб-службы, и сохраняю данные в базе данных.
Поскольку у меня есть 6 UITableView, я отправляю запрос Webservice для каждого из представлений одновременно. Однако проблема, с которой я сталкиваюсь, заключается в том, что для моего приложения получение данных из веб-службы в табличном представлении -(void) connection:(NSURLConnection *) connection didReceiveData:(NSData *) data
для 1 зависит от операций базы данных, выполняемых анализаторами других табличных представлений.
Например, запрос веб-сервиса для таблиц A, B, C, D отправляется одновременно. если я получу данные о функции -(void) connection:(NSURLConnection *) connection didReceiveData:(NSData *) data
, пока полученный XML не будет проанализирован и сохранен в моей базе данных, я не получу ответ для других табличных представлений.
Я не могу понять, что я делаю неправильно. Я знаю, что NSURLConnection является асинхронным, но ответ, который я получаю, выглядит не так.
Вот мой код -
Для отправки запроса веб-сервиса -
- (void) callMedicationWebService
{
conn = [[NSURLConnection alloc] initWithRequest:req delegate:self];
if (conn)
{
webData = [[NSMutableData data] retain];
}
}
-(void) connection:(NSURLConnection *) connection
didReceiveResponse:(NSURLResponse *) response
{
[webData setLength: 0];
}
-(void) connection:(NSURLConnection *) connection
didReceiveData:(NSData *) data
{
[webData appendData:data];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"HH:mm:ss"];
NSString *alertMessage = [formatter stringFromDate:[NSDate date]];
[formatter release];
NSLog(@"got data back from WS %@", alertMessage);
}
-(void) connectionDidFinishLoading:(NSURLConnection *) connection
{
[connection release];
// Parse xml
NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithData:[CommonHelper decodeHTMLCharactorsFromString:webData]];
TableAHandler *handler = [[TableAHandler alloc] init];
[handler initTableAHandler];
[xmlParser setDelegate:handler];
[xmlParser setShouldResolveExternalEntities:YES];
[xmlParser setShouldProcessNamespaces:YES];
BOOL success = [xmlParser parse];
}
Может ли кто-нибудь помочь мне в том, что я делаю неправильно?