迅速:从文档目录中加载多个文件

时间:2018-07-26 08:04:28

标签: ios swift

我在文档目录中有很多文件的文件夹。在我的文件夹中,我具有不同扩展名的文件(jpg,png,mp3,zip)。在我的代码中,我有stringArray。我想加载someArray中的所有文件,然后在.png中的someArray中添加扩展名为stringArray的文件。

是否可以这样做?还是我应该找到另一种从文档目录加载多个文件的方法?

我发现Load multiple images from the folder or directory. - Swift 4的{​​{3}}

我尝试使用answer中的这段代码:

func loadImagesFromAlbum(folderName:String) -> [String]{

        let nsDocumentDirectory = FileManager.SearchPathDirectory.documentDirectory
        let nsUserDomainMask    = FileManager.SearchPathDomainMask.userDomainMask
        let paths               = NSSearchPathForDirectoriesInDomains(nsDocumentDirectory, nsUserDomainMask, true)
        var theItems = [String]()
        if let dirPath          = paths.first
        {
            let imageURL = URL(fileURLWithPath: dirPath).appendingPathComponent(folderName)

            do {
                theItems = try FileManager.default.contentsOfDirectory(atPath: imageURL.path)
                return theItems
            } catch let error as NSError {
                print(error.localizedDescription)
                return theItems
            }
        }
        return theItems
    }

但是我无法从theItems获取文件。因为theItems是一个字符串数组。我做错了什么?如何从loadImagesFromAlbum获取文件?

我尝试使用此代码:

images = loadImagesFromAlbum(folderName: "/folder1")

但这对我没有帮助。我只有名字。但是我需要获取文件。

更新

我使用此代码从documents directory加载图像:

        let nsDocumentDirectory = FileManager.SearchPathDirectory.documentDirectory
        let nsUserDomainMask    = FileManager.SearchPathDomainMask.userDomainMask
        let paths               = NSSearchPathForDirectoriesInDomains(nsDocumentDirectory, nsUserDomainMask, true)
        if let dirPath          = paths.first
        {
            let imageURL = URL(fileURLWithPath: dirPath).appendingPathComponent("/folder1/1.png")
            myImageView.image = UIImage(contentsOfFile: imageURL.path)
        }

但是我需要从/folder1中的var images = [String]()加载100张图像。因为我使用var images = [String]()来显示图像,所以:contentVC.imageName = images[index] // and etc...

如果需要添加40-100张图片,我上面使用的代码不太方便。

更新1

我有以下代码可以从我的项目中加载图像并显示它:

class PageViewController: UIViewController {

override func viewDidLoad() {
        super.viewDidLoad()

            for page in 1...pageNumber[indexPage] {
                images.append("page\(page).png")

            }
}

func getContentViewController(withIndex index: Int) -> ContentViewController? {
        if index < images.count{
            let contentVC = self.storyboard?.instantiateViewController(withIdentifier: "ContentViewController") as! ContentViewController
            contentVC.itemIndex = index
            contentVC.imageName = images[index]

            return contentVC
        }

        return nil
    }
}

import UIKit

class ContentViewController: UIViewController {

    @IBOutlet weak var imageView: UIImageView!
    var itemIndex: Int = 0
    var imageName: String?

    override func viewDidLoad() {
        super.viewDidLoad()

        if let currentImage = imageName{
            imageView.image = UIImage(named: currentImage)

        }

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

但是我需要从文档目录加载图像并显示它。怎么做?

1 个答案:

答案 0 :(得分:1)

如果我正确理解了您的问题,则希望在Documents文件夹中的特定文件夹中加载特定名称的图像。

请尝试此方法,该方法采用两个参数,即文件名(带扩展名!)和文件夹名,如果找不到或创建图像,则返回UIImagenil

func loadImage(withName name : String, from folderName: String) -> UIImage? {
    do {
        let documentsFolderURL = try FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
        let imageURL = documentsFolderURL.appendingPathComponent(folderName).appendingPathComponent(name)
        let data = try Data(contentsOf: imageURL)
        return UIImage(data: data)
    } catch {
        return nil
    }
}

使用contentsOfDirectory获取所有文件路径没有任何好处,因为无论如何,您必须一一加载图像数据。