Загрузка изображения в UIImageView с помощью NSURLConnection - PullRequest
3 голосов
/ 22 февраля 2011

Привет всем. Я действительно новичок в этом obj-c / xcode. Я пытаюсь загрузить фон моего xib-файла. Чтобы сделать это, я использую UIImageView и заполняю его изображением, которое я нашел в сети. проблема в том, что это очень медленно. Такое ощущение, что он падает, но это не так. Мне сказали использовать NSURLConnection для решения проблемы, но я не знаю как. Вот код, который я использовал ранее.

wallpaper.image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://mysite.com/mobile/wallpaperR.asp?id=%i",customerID]]]];

Как мне перевести вышеуказанный код в эквивалент NSURLConnection?

Ответы [ 3 ]

6 голосов
/ 22 февраля 2011

NSURLConnection загрузит данные в новом потоке, поэтому ваше приложение будет чувствовать себя намного быстрее.

Это довольно легко реализовать, но для этого требуется понимание концепции делегирования.

У меня есть полезный класс, который я создал для обработки загрузок изображений в отдельных потоках, я поделюсь с вами кодом с комментариями, чтобы вы знали, что происходит:

AsyncImage.h

AsyncImage.m

Если вам нужна помощь в его реализации, просто оставьте комментарий, и я могу помочь вам заставить его работать, я помню, что раньше я тоже испытывал боль, когда начинал разработку.

1 голос
/ 22 февраля 2011

Для этого вам нужно выполнить синтаксический анализ, так как вы используете веб-сервис. Как это

-(void)startParsingForPhotoAlbumList:(NSString*)providerIdString
{
    NSString *urlString = [NSString stringWithFormat:@"http://YourUrl/showalbumxml.php?id=%@&show=show",providerIdString];
    NSURL *xmlURL = [NSURL URLWithString:urlString];
    NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] initWithURL:xmlURL cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:30.0]autorelease];
    NSURLResponse *returnedResponse = nil;
    NSError *returnedError = nil;
    NSData *itemData  = [NSURLConnection sendSynchronousRequest:request returningResponse:&returnedResponse error:&returnedError];
    self.xmlParser = [[NSXMLParser alloc] initWithData:itemData];       
    [xmlParser setDelegate:self];
    [xmlParser parse];
}

и необходимо реализовать метод делегата парсера в качестве примера.

- (void)parserDidEndDocument:(NSXMLParser *)parser
{
    if ([[[resultArray objectAtIndex:1]objectForKey:@"Transaction"]isEqualToString:@"Myapp/snaps"]) 
    {
        [(LoginViewController *)obj getRegisterResult:resultArray];
    }
}

Затем в вашем Viewcontroller получите доступ к данным, при разборе вам нужно передать объекты, используя массив или словарь.

NSData *imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:itemImagePath]];
UIImage *image = [[UIImage alloc] initWithData:imageData];
0 голосов
/ 13 мая 2013

Вот пример, который может помочь:

NSURLConnection loading image example

...