Это правильный способ перебрать NSURL для загрузки изображений - PullRequest
0 голосов
/ 31 мая 2011

У меня есть файлы разного размера, загруженные по каждому URL, и я хочу загрузить данные одновременно, не используя несколько вызовов для каждого URL.Я пытаюсь перебрать URL-адрес с помощью переменной и хранения данных.Это правильный способ сделать это?

- (id)initWithFrame:(CGRect)frame {

self = [super initWithFrame:frame];
if (self) {
    // Initialization code.

    isImageRequested = NO;
}
return self;
}

-(BOOL) isImageRequested
{
   return isImageRequested;
}


-(void) startImageDownloading
{

if (!isImageRequested)
{
    isImageRequested = YES;

    for (int i = 1; i <= 7; i++) {

        NSLog(@"Inside for loop");
        URLString = [NSString stringWithFormat:@"http://www.abc.com/method=image&size=%d", i];  
        //NSLog(@"string : %d", URLString);
        self.responseData = [NSMutableData data];
        NSURLRequest *pServerRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:URLString]];
        self.serverConnection= [[[NSURLConnection alloc] 
                                 initWithRequest:pServerRequest delegate:self] autorelease];

              /*UPDATED*/
                    if (i == 1) {

            prefixString = @"image_124_";
        }

        if (i == 2) {

            prefixString = @"image_250_";
        }

        if (i == 3) {

            prefixString = @"image_500_";
        }

        if (i == 4) {

            prefixString = @"image_750_";
        }

        if (i == 5) {

            prefixString = @"image_1000_";
        }

        if (i == 6) {

            prefixString = @"image_1500_";
        }

        if (i == 7) {

            prefixString = @"image_2000_";
        }


    }
   }

}



 -(void)cancelConnectionRequest
  {
    if (isImageRequested && serverConnection != nil)
    {
    [self.serverConnection cancel];self.serverConnection = nil;
    [self removeActivityIndicator];
    [self deallocateResources];
    isImageRequested = NO;
   }

  }

  - (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:           (NSURLAuthenticationChallenge *)challenge 
    {
      if ([challenge.protectionSpace.authenticationMethod  isEqualToString:NSURLAuthenticationMethodServerTrust])
{
    [challenge.sender useCredential:[NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust] forAuthenticationChallenge:challenge];
}
[challenge.sender continueWithoutCredentialForAuthenticationChallenge:challenge];
}


 -(void) connection:(NSURLConnection *) connection didReceiveResponse:(NSURLResponse *)   response 
   {
     [responseData setLength:0]; 

    }


 -(void) connection:(NSURLConnection *) connection didReceiveData:(NSData *) data 
  {
    [responseData appendData:data];

   }

   -(void) connection:(NSURLConnection *) connection didFailWithError:(NSError *) error 
    {
NSLog(@"Error occured while loading image : %@",error);
[self removeActivityIndicator];
[self deallocateResources];


UILabel *tempLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 150, 30)];
[tempLabel setBackgroundColor:[UIColor clearColor]];
[tempLabel setFont:[UIFont systemFontOfSize:11.0f]];
[tempLabel setCenter:CGPointMake(self.frame.size.width/2, self.frame.size.height/2)];
[tempLabel setText:@"Image not available."];
[self addSubview:tempLabel];
[tempLabel release];

 }


-(void) connectionDidFinishLoading:(NSURLConnection *) connection 
 {


UIImage *tempImage = [[UIImage alloc] initWithData:responseData];
NSData *imageData = UIImagePNGRepresentation([UIImage imageWithData:responseData]);

self.image = tempImage;

      /*UPDATED*/
     PhotoViewController *photoMap = [[PhotoViewController alloc] init] ;


 [photoMap saveTilesOfSize:(CGSize){500,500} forImage:tempImage toDirectory:directoryPath usingPrefix:prefixString]; 
[tempImage release];


}

   -(void) deallocateResources
  {

if (serverConnection != nil) 
{
    [serverConnection release];
    serverConnection = nil;
}
if (responseData != nil)
{
    [responseData release];
    responseData = nil;
     }

   }


 - (void)dealloc {
    [super dealloc];
[responseData release];
[serverConnection release];
 }


 @end

1 Ответ

1 голос
/ 31 мая 2011

Способ получения фотографий зависит от того, к какому серверу вы подключаетесь.

У него может быть определенный URL-адрес, по которому вы можете загрузить кучу фотографий, или вас могут заставить делать это так, как вы делаете.сейчас.Что является совершенно правильным подходом, если сервер не позволяет делать что-то более изощренное.

Итак, это зависит от API вашего сервиса.

С другой стороны, если вы неЕсли вы не хотите инициировать несколько запросов одновременно, вы можете использовать NSOperationQueue для сериализации сетевых операций.

...