2009-08-18 4 views
0

У меня возникают некоторые проблемы при загрузке UIImage из URL в UIImageView на iPhone. Когда я создаю NSURL (с URL-адресом в аргументе метода URLWithString из NSURL), используя свойства объекта, изображение вообще не извлекается, однако если я жестко задаю один и тот же URL-адрес, изображение будет восстановлено и отображено как ожидалось.
[item valueForKey: @ "pictureLocation"]; часть ниже выглядит тем, что вызывает проблему, потому что даже когда две жестко закодированные строки объединены, NSURl генерируется без проблем.iPhone Загрузка изображения из URL

NSString * imagePath = @"http://localhost:3000"; 
NSString * specificPath = (NSString *)[item valueForKey:@"pictureLocation"] ; 
//concatenate the strings to get a fully formed URL 
NSString * finalPath = [imagePath stringByAppendingString:specificPath];  

UIImage *img = [[UIImage imageWithData: [NSData dataWithContentsOfURL: [NSURL URLWithString:finalPath]]] retain]; 

По сути, когда я NSLog в finalPath и вместо того, чтобы жёстко, что URL в программу, я получаю ожидаемый результат.

Любые идеи относительно того, почему это может быть так?

Спасибо.

ответ

0

Как NSString вернулся valueForKey:? Это что-то вроде «image.png», или это «/image.png»? Если это первый, вы хотите использовать stringByAppendingPathComponent: вместо stringByAppendingString:.

+0

Спасибо за ваш отзыв ... URL-адрес, сформированный из этого кода, верен и отображает изображение при вводе в браузер ... – 2009-08-19 03:44:17

+0

Как выглядит строка URL после того, как строка была объединена? – Cinder6

+0

он полностью сформирован и правильно разрешен в браузере: http: // localhost: 3000/pictures/picture.jpg – 2009-08-20 02:39:44

0

Вам необходимо использовать UIWebView и загрузить в него html <img />. По крайней мере, это хороший обходной путь.

Проверить код здесь http://blog.timeister.com/2009/07/18/iphone-show-online-image/

- (void)loadImage:(NSString*)url frame:(CGRect)frame { 
NSString* textHTML = @" 
<html><head> 
<style type=\"text/css\"> 
body { 
background-color: transparent; 
color: white; 
} 
</style> 
</head><body style=\"margin:0\"> 
<img src=\"%@\" width=\"%0.0f\" height=\"%0.0f\"></img> 
</body></html>"; 

NSString* html = [NSString stringWithFormat:textHTML, url, frame.size.width, frame.size.height]; 

if(webView == nil) { 
webView = [[UIWebView alloc] initWithFrame:frame]; 
[self.view addSubview:webView]; 
} 

[webView loadHTMLString:html baseURL:nil]; 
} 

Адриан

+0

Я попробую это. Я запутался, потому что, когда я просто использую полный URL-адрес изображения непосредственно в методе [NSURL URLWithString], изображение появляется ... – 2009-08-19 03:45:06

+0

Тот факт, что он работает с жестко запрограммированным URL-адресом, говорит о том, что проблема заключается в создании строки. Я думаю, что вы получите тот же результат с этим решением - вам нужно убедиться, что объект NSURL, созданный с помощью конкатенированной строки, не является нулевым. – Cinder6

0

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

пытаются кодирующей параметры правильно, используя следующие функции:

encodedparams = [params stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding]; 

Так что в вашем случае:

NSString * specificPath = (NSString *)[item valueForKey:@"pictureLocation"] ; 
specificPath = [specificPath stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding]; 

Я думаю, что это решит вашу проблему.

Смежные вопросы