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

Posted

技术标签:

【中文标题】将目录中保存的图像显示到集合视图【英文标题】:Showing saved images in directory to a Collection View 【发布时间】:2013-08-14 13:31:18 【问题描述】:

通常当您在项目文件中有图像时,您会使用代码

arraycollectionimages = [[NSArray alloc]]initwithobjects

但是我想显示保存在目录中的图像。我创建了多个目录,所以我只想为其中一个调用图像。为了完成这项工作,我想使用此代码但是我不能这样做?我只是按如下方式将其卡住,但效果不佳。

- (void)viewDidLoad 
    NSArray *arrayCollectionImages = [[NSArray alloc ]init];
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *location=@"Genre1";
    NSString *fPath = [documentsDirectory stringByAppendingPathComponent:location];
    NSArray *directoryContent = [[NSFileManager defaultManager] directoryContentsAtPath: fPath];
    for(NSString *str in directoryContent)
        NSString *finalFilePath = [fPath stringByAppendingPathComponent:str];
        NSData *data = [NSData dataWithContentsOfFile:finalFilePath];
        if(data)
        
            UIImage *image = [UIImage imageWithData:data];
            [arrayCollectionImages addObject:image];
        
    

【问题讨论】:

【参考方案1】:

我认为您的目录搜索可能需要很长时间。试试这个...

        - (void)viewDidLoad 
            dispatch_queue_t searchQ = dispatch_queue_create("com.awesome", 0);
            dispatch_async(searchQ, ^
            NSArray *arrayCollectionImages = [[NSArray alloc ]init];
            NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
            NSString *documentsDirectory = [paths objectAtIndex:0];
            NSString *location=@"Genre1";
            NSString *fPath = [documentsDirectory stringByAppendingPathComponent:location];
            NSArray *directoryContent = [[NSFileManager defaultManager] directoryContentsAtPath: fPath];
            for(NSString *str in directoryContent)
                NSString *finalFilePath = [fPath stringByAppendingPathComponent:str];
                NSData *data = [NSData dataWithContentsOfFile:finalFilePath];
                if(data)
                   dispatch_async(dispatch_get_main_queue(),^
                    UIImage *image = [UIImage imageWithData:data];
                    );
                    [arrayCollectionImages addObject:image];
                
            
    );


代码基本上会在搜索中产生另一个线程,并在图像准备好时放置图像。

【讨论】:

您好,感谢您的回答,我在[arrayCollectionImages addObject:image]; 收到图像错误,您能解释一下最后一段代码吗?我在 arrayCollectionImages 也有一个警告,说 arrayColectionImages 的本地声明隐藏实例变量。 对于addObject,您需要一个NSMutableArray 是的,您需要将 arraycollectionimages = [[NSArray alloc]]initwithobjects 更改为 ....arraycollectionimages = [[NSMutableArray alloc]]initwithobjects

以上是关于将目录中保存的图像显示到集合视图的主要内容,如果未能解决你的问题,请参考以下文章

在保存在文档目录中的表格视图中显示图像

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

如何通过iphone中的sqlite获取路径来显示文档目录中保存的图像

从网络加载图像并将其显示在集合视图中

在集合视图单元格中自行调整图像大小

将数组中的图像嵌入到集合视图的单元格中