我们如何在iPhone Xcode中处理多个NSURLConnection?
发布时间:2020-12-15 01:50:48 所属栏目:百科 来源:网络整理
导读:我正在开发一个小应用程序,其中我有多个NSURLConnection.I已创建NSURL连接但我不知道如何处理它.我的代码如下所示. -(void) loadTrafficAndEvent { int a=10; //Get the map view bounds for fetch the travel time markers from web service MKCoordinateRe
我正在开发一个小应用程序,其中我有多个NSURLConnection.I已创建NSURL连接但我不知道如何处理它.我的代码如下所示.
-(void) loadTrafficAndEvent { int a=10; //Get the map view bounds for fetch the travel time markers from web service MKCoordinateRegion region = mapView.region; float print = region.center.latitude; // NSLog(@"region.center=%g",print); CGPoint firstcorner = CGPointMake(self.mapView.bounds.origin.x,mapView.bounds.origin.y); CGPoint secondcorner = CGPointMake((self.mapView.bounds.origin.x+mapView.bounds.size.width),mapView.bounds.origin.y); CGPoint thirdcorner = CGPointMake(self.mapView.bounds.origin.x,(mapView.bounds.origin.y+ mapView.bounds.size.height)); CGPoint fourthcorner = CGPointMake((self.mapView.bounds.origin.x+mapView.bounds.size.width),(mapView.bounds.origin.y + mapView.bounds.size.height));; //Then transform those point into lat,lng values CLLocationCoordinate2D mapfirstcorner,mapsecondcorner,mapthirdcorner,mapfourthcorner,requestsender; mapfirstcorner = [mapView convertPoint:firstcorner toCoordinateFromView:mapView]; mapsecondcorner = [mapView convertPoint:secondcorner toCoordinateFromView:mapView]; mapthirdcorner = [mapView convertPoint:thirdcorner toCoordinateFromView:mapView]; mapfourthcorner = [mapView convertPoint:fourthcorner toCoordinateFromView:mapView]; NSDateFormatter *dateFormatter; dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"MM-dd-yyyy"]; NSString *date = [dateFormatter stringFromDate:[NSDate date]]; [dateFormatter release]; NSString *checksumString = [NSString stringWithFormat:@"TrafficAndEvents%@ForTravelStar",date]; NSString *md5Checksum = [self getMD5CheckSum:checksumString]; NSString *url = [NSString stringWithFormat:@"http://www.travelstar.nl/travelstarwebservice/ProviderServices.asmx/GetTrafficStatusAndEvent?northWestLatitude=%f&northWestLongitude=%f&southEastLatitude=%f&southEastLongitude=%f&zoomLevel=%d&date=%@&checksum=%@",mapfirstcorner.latitude,mapfirstcorner.longitude,self.mapView.region.center.latitude,self.mapView.region.center.longitude,a,date,md5Checksum]; NSString *url1 = [NSString stringWithFormat:@"http://www.travelstar.nl/travelstarwebservice/ProviderServices.asmx/GetTrafficStatusAndEvent?northWestLatitude=%f&northWestLongitude=%f&southEastLatitude=%f&southEastLongitude=%f&zoomLevel=%d&date=%@&checksum=%@",mapsecondcorner.latitude,mapsecondcorner.longitude,md5Checksum]; NSString *url2 = [NSString stringWithFormat:@"http://www.travelstar.nl/travelstarwebservice/ProviderServices.asmx/GetTrafficStatusAndEvent?northWestLatitude=%f&northWestLongitude=%f&southEastLatitude=%f&southEastLongitude=%f&zoomLevel=%d&date=%@&checksum=%@",mapthirdcorner.latitude,mapthirdcorner.longitude,md5Checksum]; NSString *url3 = [NSString stringWithFormat:@"http://www.travelstar.nl/travelstarwebservice/ProviderServices.asmx/GetTrafficStatusAndEvent?northWestLatitude=%f&northWestLongitude=%f&southEastLatitude=%f&southEastLongitude=%f&zoomLevel=%d&date=%@&checksum=%@",mapfourthcorner.latitude,mapfourthcorner.longitude,md5Checksum]; //Release the request if it is already created. if(request1 ) { [request release]; request = nil; } else if(request1 ) { [request1 release]; request1 = nil; } else if(request2 ) { [request2 release]; request2 = nil; } else if(request3 ) { [request3 release]; request3 = nil; } //Release the connection if it is already created. if(conn) { [conn cancel]; [conn release]; conn = nil; } else if(conn1) { [conn1 cancel]; [conn1 release]; conn1 = nil; } else if(conn2) { [conn2 cancel]; [conn2 release]; conn2 = nil; } else if(conn3) { [conn3 cancel]; [conn3 release]; conn3 = nil; } //If zoom level is grater then 6 then it will request for fetch the travel time markers from the web servce. if(a > 6) { ZOOM_LEVEL = a; //Create the request for fetch the data from web service. request = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:url]]; request1 = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:url1]]; request2 = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:url2]]; request3 = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:url3]]; //NSLog(@"%@",url); //NSLog(@"Request sent"); //entryDate = [NSDate date]; //[entryDate retain]; //Create the connection with the web service for fetch the data // DownloadDelegate *dd = [[DownloadDelegate alloc] init]; conn = [[NSURLConnection alloc] initWithRequest:request delegate:self]; conn1 = [[NSURLConnection alloc] initWithRequest:request1 delegate:self]; conn2 = [[NSURLConnection alloc] initWithRequest:request2 delegate:self]; conn3 = [[NSURLConnection alloc] initWithRequest:request3 delegate:self]; } } 解决方法
在.h文件中声明conn,conn1,conn2,conn3.
然后执行以下操作. 在loadTrafficAndEvent中: conn1 = [[NSURLConnection alloc] initWithRequest:request1 delegate:self]; 在connectionDidFinishDownloading:方法中, - (void)connectionDidFinishDownloading:(NSURLConnection *)connection destinationURL:(NSURL *)destinationURL{ if(connection==conn){ conn1 = [[NSURLConnection alloc] initWithRequest:request1 delegate:self]; } else if(connection==conn1){ conn2 = [[NSURLConnection alloc] initWithRequest:request2 delegate:self]; } else if(connection==conn2){ conn3 = [[NSURLConnection alloc] initWithRequest:request3 delegate:self]; } } 在每个if else条件中执行操作,并且不需要在loadTrafficAndEvent中分配和初始化所有NSURLConnection:下载将一个接一个地发生. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |