在保存在文档目录中的表格视图中显示图像
Posted
技术标签:
【中文标题】在保存在文档目录中的表格视图中显示图像【英文标题】:displaying image in table view which is saved in document directory 【发布时间】:2013-03-26 07:39:11 【问题描述】:我已使用以下代码将图像保存在文档目录中,并且图像成功保存在文档目录中
UIImage *image =[[UIImage alloc ]init ];
image = [UIImage imageNamed:@"PlaceHolder.png"];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString* path = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithString: @"PlaceHolder.png"] ];
NSData* data = UIImagePNGRepresentation(image);
[data writeToFile:path atomically:YES];
现在我想在表格视图中显示图像 在我的表格视图中,一些图像从 facebook url 显示,这就是我使用以下代码的原因
NSString *path = [[_arrayForTable valueForKey:@"URL"] objectAtIndex:[indexPath row]];
NSURL *url = [NSURL URLWithString:path];
AsyncImageView *imageView = [[[AsyncImageView alloc] init] autorelease];
imageView.frame = CGRectMake(0, -5, 45, 45);
imageView.imageURL=url;
_arrayForTable 是 Dic 数组,它包括 URL,一些链接来自 facebook,一些来自文档目录
现在我的问题如下
** 只有 facebook 图片显示在表格视图中,但文档目录图片未显示**
我已检查位置对于图像完全正确,但现在正在显示
【问题讨论】:
把图片显示的代码放到documents目录下.. 我从未使用过 AsyncImageView 类,但根据我的经验,在目录中找到的图像应使用 [[UIImage alloc] initWithContentsOfFile:filePath] 加载。 但是有些图片是从 url 显示的,那么怎么做一些来自 url,一些来自 uiimage? 你不需要Async imageview,即使它是从一个url显示的......你可以直接显示它 男人然后表格视图不会平滑需要懒惰的loding 【参考方案1】:NSURL *url = [NSURL URLWithString:path];
这在您的代码中是错误的。用这行代码替换它。
NSURL *url = [NSURL fileURLWithPath:path];
检查文件是否存在于您的文档目录中
if([[NSFileManager defaultManager] fileExistsAtPath:path])
NSURL *url = [NSURL fileURLWithPath:path];
如果图像正在保存,请检查您的文档目录。像这样为您提供图像的名称
image = [UIImage imageNamed:@"PlaceHolder.png"];
因此,如果您重复这一行,您的图像将被覆盖在文档目录中。
你也可以在这里打勾 BOOL 成功 = [数据 writeToFile:path atomically:YES];
if(success)
NSLog(@"image written successfully");
else
NSLog(@"image writing failed");
希望我能帮上忙。
【讨论】:
【参考方案2】:在您的 .m 文件中
@interface YourClass ()<NSURLConnectionDelegate>
@property (nonatomic, copy) NSMutableData *receivedImageData;
@end
@implementation YourClass
- (void)init
if (self = [super init])
// Do your init stuff
_receivedImageData = [[NSMutableData alloc] initWithCapacity:0];
// A method to start your connection
- (void)startDownloadingImage
NSMutableURLRequest *downloadImageRequest = [[NSMutableURLRequest alloc] init];
downloadImageRequest.URL = [NSURL URLWithString:@"http://www.theImage.you/want/to/download.extension"];
downloadImageRequest.HTTPMethod = @"GET";
[NSURLConnection connectionWithRequest:downloadImageRequest delegate:self];
// You need the following delegate methods
#pragma mark -
#pragma mark NSURLConnection delegate methods
- (NSURLRequest *)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)redirectResponse
return request;
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
// This method is called frequently ... you can see if you log
// NSLog(@"I am downloading");
[self.receivedImageData appendData:data];
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
// Log an error or do whatever you want ;)
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
// Create your picture here using
UIImage *image = [UIImage imageWithData:self.receivedImageData scale:1.0];
// Only if there is an image display the downloaded image
if (CGSizeEqualToSize(self.imageView.image.size, CGSizeZero))
self.imageView.image = image;
您可以尝试下载图片,如果没有图片可以继续显示 PlaceHolder.png 确保您复制图像并且它确实在您的项目目录中
// self.imageView is an UIImageView
self.imageView.image = [UIImage imageNamed:@"PlaceHolder.png"];
[self startDownloadingImage];
如果对你有帮助,请告诉我 ;)
【讨论】:
【参考方案3】:您是否检查了文档目录图像的图像数据不为零?您必须通过正确的路径检索图像并确保您提供正确的位置
【讨论】:
我已经检查过了。有图像,是的,路径完全正确【参考方案4】:AsyncImageView
是UIImageView
的子类。使用initWithContentsOfFile:filePath
加载图像后,您可以简单地设置image
属性。您只需弄清楚要从目录中加载哪些图像,以及从网络加载哪些图像。
【讨论】:
【参考方案5】:NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [[_arrayForTable valueForKey:@"URL"] objectAtIndex:[indexPath row]];
NSURL *url = [NSURL URLWithString:path];
if ([path rangeOfString:documentsDirectory].location != NSNotFound)
url = [NSURL fileURLWithPath:path isDirectory:NO];
AsyncImageView *imageView = [[[AsyncImageView alloc] init] autorelease];
imageView.frame = CGRectMake(0, -5, 45, 45);
imageView.imageURL=url;
【讨论】:
【参考方案6】:Asynchimageview 是否支持从文档目录或带有图像 url 的包加载图像??..尝试先从包中加载图像。最近我遇到了类似的问题,最终从服务器本身加载了一个占位符。
与其他一些答案一样,您可以先创建一个 UIImage
对象,并将 initWithContentsOfFile:
设置为 asynchimageView.image
。
【讨论】:
以上是关于在保存在文档目录中的表格视图中显示图像的主要内容,如果未能解决你的问题,请参考以下文章
无法从 iPhone 文档目录位置中的已保存文件重新加载 UIImage