从文档目录获取图像到集合视图

Posted

技术标签:

【中文标题】从文档目录获取图像到集合视图【英文标题】:Get images from documents directory to collection view 【发布时间】:2014-02-15 21:53:07 【问题描述】:

如何从文档目录中获取图像以填充集合视图。到目前为止,我根据我的日志将所有图像转储到每个单元格中,(或者至少图像名称打印在日志中)

首先我从文档目录filelist 获取图像名称是imageNames.png 的NSMutable 数组

 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsPath = [paths objectAtIndex:0];
    NSArray *dirContents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:documentsPath error:nil];
    fileList=[[NSMutableArray alloc]init];
    for (NSString *filename in dirContents) 
        NSString *fileExt = [filename pathExtension];

        if ([fileExt isEqualToString:@"png"]) 

            [fileList addObject:filename];
        
    
    NSLog(@"document folder content list %@ ",fileList);

这将返回我的 NSMutsableArray fileList 中的 png 文件名列表。然后我想将所有这些图像放入我的收藏视图中

//set up cell from nib in viewDidLoad
    UINib *cellNib = [UINib nibWithNibName:@"NibCell" bundle:nil];
    [self.appliancesCollectionView registerNib:cellNib forCellWithReuseIdentifier:@"cvCell"];


     /////


-(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView 

return 1;


-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section 


return fileList.count;
NSLog(@"collection view count is %@",fileList);



-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath 

// Setup cell identifier
static NSString *cellIdentifier = @"cvCell";

UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:cellIdentifier forIndexPath:indexPath];


NSString *fileName = [fileList objectAtIndex:indexPath.row];
cell.backgroundView = [[UIImageView alloc] initWithImage: [UIImage imageNamed: fileName]];
NSLog(@"cell Bg image %@",fileList);

return cell;




The probelm is nothing shows up in my collection view cells

【问题讨论】:

但实际问题是什么?我注意到您正确地从“numberOfItemsInSection:”返回计数,除了您在返回后尝试执行 NSLog。 我的单元格中没有显示任何内容,只是单元格笔尖为空,nslog on count 返回消失,谢谢 将“NSLog(@"cell Bg image %@",fileList);”更改为“NSLog(@"cell Bg image %@",fileName);”,您看到的预期文件名是否正确? 是的,预期的文件名已记录 【参考方案1】:

问题是 contentsOfDirectoryAtPath 返回相对文件路径。你需要绝对的。应该使用如下内容:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsPath = [paths objectAtIndex:0];
NSArray *dirContents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:documentsPath error:nil];
fileList=[[NSMutableArray alloc]init];

NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; // NEW LINE 1

for (NSString *filename in dirContents) 
    NSString *fileExt = [filename pathExtension];
    if ([fileExt isEqualToString:@"png"]) 
        NSString *fullPath = [documentsDirectory stringByAppendingPathComponent:filename]; // NEW LINE 2
        [fileList addObject:fullPath]; // NEW LINE 3
    

NSLog(@"document folder content list %@ ",fileList);

【讨论】:

什么是filename?你能根据我发布的代码对此进行扩展吗 我的“文件名”和你的一样。请看新的例子。我已经用 cmets 标记了新的/更新的行 // NEW LINE ... 谢谢,好的,确实提供了绝对的文件路径,非常感谢,我仍然没有改变背景一定是我缺少其他东西。加 1 为您提供帮助【参考方案2】:

您需要使用 imageWithContentsOfFile: 代替 imageNamed:

NSString * filePath = [[NSBundle mainBundle] pathForResource:<imageNameWithoutExtansion>ofType:<fileExtansion>];
cell.backgroundView = [[UIImageView alloc] initWithImage: [UIImage imageWithContentsOfFile: filePath]];

【讨论】:

仍然是同样的问题,该代码用于加载单个图像 surley

以上是关于从文档目录获取图像到集合视图的主要内容,如果未能解决你的问题,请参考以下文章

从集合视图传递到视图控制器的简单图像数据失败

无法将本地存储的图像更快地加载到集合视图中。?

当图像保存在核心数据的集合视图中时,应用程序因内存错误而崩溃

填充集合视图内的图像视图

将目录中保存的图像显示到集合视图

如何在单元格中调用图像 url 和图像视图以获取集合视图的索引路径功能