我在文档目录中有很多文件的文件夹。在我的文件夹中,我具有不同扩展名的文件(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.
}
}
但是我需要从文档目录加载图像并显示它。怎么做?
答案 0 :(得分:1)
如果我正确理解了您的问题,则希望在Documents
文件夹中的特定文件夹中加载特定名称的图像。
请尝试此方法,该方法采用两个参数,即文件名(带扩展名!)和文件夹名,如果找不到或创建图像,则返回UIImage
或nil
。
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
获取所有文件路径没有任何好处,因为无论如何,您必须一一加载图像数据。