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