加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

我们如何在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:下载将一个接一个地发生.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读