Как мы можем обрабатывать несколько NSURLConnection в iPhone Xcode? - PullRequest
4 голосов
/ 30 января 2012

Я занимаюсь разработкой одного небольшого приложения, в котором у меня есть несколько NSURLConnection. Я создал это NSURL Connection, но я не знаю, как его обработать. Мой код похож на ниже.

-(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, self.mapView.region.center.latitude, self.mapView.region.center.longitude, a,date,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, self.mapView.region.center.latitude, self.mapView.region.center.longitude, a,date,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, self.mapView.region.center.latitude, self.mapView.region.center.longitude, a,date,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];
    }                  
}

Ответы [ 3 ]

6 голосов
/ 30 января 2012

Объявите conn, conn1, conn2, conn3 в файле .h.Затем сделайте следующее.в loadTrafficAndEvent:

conn1 = [[NSURLConnection alloc] initWithRequest:request1 delegate:self];

in 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, и нет необходимости выделять и инициализировать все NSURLConnection в loadTrafficAndEvent: загрузка будетпроисходят один за другим.

1 голос
/ 30 января 2012

Возможно, вы захотите взглянуть на AFNetworking , чтобы упростить и упростить выполнение сетевых запросов.

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

Реализуйте методы делегата NSURLConnection, а остальные будут обрабатываться самим

...