在我的iPAD应用程序中,我有6个UITableViews。为了获取每个tableview的数据,我使用NSURLConnection调用Webservice并解析我从Webservice返回的xml并将数据存储到数据库中。
由于我有6个UITableView,我同时发送每个视图的Webservice请求。但是,我面临的问题是,我的应用程序从-(void) connection:(NSURLConnection *) connection didReceiveData:(NSData *) data
上的Web服务接收1个表视图的数据依赖于其他表视图的解析器执行的数据库操作。
例如,tableview的A,B,C,D的webservice请求都是同时发送的。如果我收回-(void) connection:(NSURLConnection *) connection didReceiveData:(NSData *) data
函数上的数据,直到收到的xml被解析并保存到我的数据库中,我没有收到其他表视图的响应。
我无法弄清楚我做错了什么。我知道NSURLConnection是异步的,但我得到的反应似乎并非如此。
这是我的代码 -
用于发送Webservice请求 -
- (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];
}
有人能帮我解决我做错的事吗?
答案 0 :(得分:1)
异步并不一定意味着在单独的线程中调用回调函数本身。
如果您希望所有解析过程同时发生,您将不得不将解析过程移动到单独的线程。
虽然更好的解决方案是不使用5个不同的URLRequests,并且只使用一个返回所有必需信息。