Я использовал его при построении объектов в сегменте общей памяти.
Наиболее вероятная причина заключается в том, что вы на самом деле не загружаете изображение или получаете изображение, которое iPhone не может декодировать. Я бы начал с проверки MIME-типа результата ( [response MIMEType]
) и убедился, что это именно то, что вы ожидаете, а не на самом деле, например, строка. Затем убедитесь, что ваш тип является одним из типов, которые UIImage может обрабатывать: tiff, jpeg, gif, png, bmp, ico, cur, xbm.
Вполне возможно, что то, что возвращает ваш сервер, на самом деле не является данными изображения, и вы можете просто вставить URL-адрес в браузер и посмотреть, получите ли вы изображение. Кажется, что с кодом все в порядке, за исключением отсутствия проверки ошибок.
Когда вы передаете NSData без изображения в сообщение + imageWithData, вы получите nil. Вам, вероятно, следует проверить это.
Я написал класс RemoteImage для асинхронной загрузки изображений по сети. При необходимости он также заботится об освобождении памяти. См. Это сообщение: http://www.dimzzy.com/blog/2009/11/remote-image-for-iphone/
Вероятно, это не имеет прямого отношения к вашему вопросу, но я хотел указать, что ваша проверка ошибок здесь имеет потенциальную проблему. Подобные методы, у которых есть параметр ссылки на NSError
, обычно не определяют, что они возвращают в случае успеха. Другими словами, вы должны сначала проверить возвращаемое значение метода, и только только обращаются к указателю ошибки, если метод не удался:
NSString *resultString = nil;
NSData *result = [NSURLConnection sendSynchronousRequest:request
returningResponse:&response
error:&error];
[request release];
if( result ) {
resultString = [[NSString alloc] initWithData:result
encoding:NSUTF8StringEncoding];
}
else {
[self handleError:error];
}
Если все, что вы пытаетесь сделать, это захватить изображение с веб-сервера через URL-адрес, есть более простой способ.
Это то, что я использую:
UIImage* myImage = [UIImage imageWithData:
[NSData dataWithContentsOfURL:
[NSURL URLWithString: @"http://example.com/image.jpg"]]];
И если вы хотите использовать его при просмотре изображений, просто сделайте следующее:
// Let's assume the picture is an instantiated UIImageView
[picture setImage: myImage];
[myImage release];
Я уверен, что есть причины, по которым человек может не захотеть использовать этот подход, но Я бы начал с этого и посмотрел, будет ли он делать то, что вам нужно.