如何从swift的文档目录中获取NSURL的特定文件 [英] How to get NSURL on specific file from document directory in swift

查看:147
本文介绍了如何从swift的文档目录中获取NSURL的特定文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

通过 NSFileManager 的帮助,我从文档目录中获取文件。我有一个文件名的数组,我可以把它们传给另一个控制器。当我传递这些文件的名称时,仍然要从 UITableViewCell 中的特定文件传递 NSURL 。我的文件是mp3。请帮助我。

I getting files from document directory with the help of NSFileManager. I got an array of file names and I can pass them to another controller. Still I want to pass NSURL on specific file from my UITableViewCell as I pass names of these files. My files are mp3. Please help me.

 var listOfMP3Files: Array<String!>? // for Cell data

    func fetchFilesFromFolder() {
        var fileManager = NSFileManager.defaultManager()

        var folderPathURL = fileManager.URLsForDirectory(NSSearchPathDirectory.DocumentDirectory, inDomains: NSSearchPathDomainMask.UserDomainMask)[0] as! NSURL

        var documentsContent = fileManager.contentsOfDirectoryAtPath(folderPathURL.path!, error: nil)
        println(documentsContent)

        if var directoryURLs = fileManager.contentsOfDirectoryAtURL(folderPathURL, includingPropertiesForKeys: nil, options: NSDirectoryEnumerationOptions.SkipsHiddenFiles, error: nil) {
            println(directoryURLs)

            var mp3Files = directoryURLs.map(){ $0.lastPathComponent }.filter(){ $0.pathExtension == "mp3" }

            listOfMP3Files = mp3Files
            println(mp3Files)
        }
    }

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    var playerVC = (segue.destinationViewController as! UINavigationController).topViewController as! AVPlayerVC
    var indexPath = tableView.indexPathForSelectedRow()
    var objectForPass = listOfMP3Files![indexPath!.row] // default
    if segue.identifier == "listenMusic" {
        playerVC.object = objectForPass 
    }
}

更新

我更新了我的代码,我可以获取jpg类型的文件。但是我不知道如何获取mp3文件。

I updated my code and I can to get files of jpg type. But I don't know how to get mp3 files.

我更新的代码

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    var playerVC = (segue.destinationViewController as! UINavigationController).topViewController as! PlayMusicViewController
    var indexPath = tableView.indexPathForSelectedRow()
    var objectForPass = listOfMP3Files![indexPath!.row] // default
    //

    var path = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)[0] as? String
    var getImage = path?.stringByAppendingPathComponent(objectForPass)
    var image = UIImage(contentsOfFile: getImage!)

    if segue.identifier == "listenMusic" {
        playerVC.musicFile = objectForPass
        playerVC.end = image 
    }
}

UPDATE2
我编辑了我的代码,我可以在mp3文件和另一个 NSURL > UIViewController 我可以玩他们。

UPDATE2 I edited my code and I can to pass NSURL on mp3 files and in another UIViewController I can play them.

以下是编辑过的代码

  override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        var playerVC = (segue.destinationViewController as! UINavigationController).topViewController as! PlayMusicViewController
        var indexPath = tableView.indexPathForSelectedRow()
        var objectForPass = listOfMP3Files![indexPath!.row] // default
        //

      /*  var path = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)[0] as? String
        var getImage = path?.stringByAppendingPathComponent(objectForPass)
        var image = UIImage(contentsOfFile: getImage!) */
        //
        var fileM = NSFileManager.defaultManager()

        var wayToFile = fileM.URLsForDirectory(NSSearchPathDirectory.DocumentDirectory, inDomains: NSSearchPathDomainMask.UserDomainMask)
        var passMusicFileURL: NSURL?

        if let documentPath: NSURL = wayToFile.first as? NSURL {
            let musicFile = documentPath.URLByAppendingPathComponent(objectForPass)
            println(musicFile)
            passMusicFileURL = musicFile
        }
        if segue.identifier == "listenMusic" {
           // playerVC.musicFile = objectForPass
            playerVC.end = passMusicFileURL
        }
    }


推荐答案

我找到了一个解决方案,我的问题

I found a solution for my question

  override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    var playerVC = (segue.destinationViewController as! UINavigationController).topViewController as! PlayMusicViewController
    var indexPath = tableView.indexPathForSelectedRow()
    var objectForPass = listOfMP3Files![indexPath!.row] // default
    //

  /*  var path = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)[0] as? String
    var getImage = path?.stringByAppendingPathComponent(objectForPass)
    var image = UIImage(contentsOfFile: getImage!) */
    //
    var fileM = NSFileManager.defaultManager()

    var wayToFile = fileM.URLsForDirectory(NSSearchPathDirectory.DocumentDirectory, inDomains: NSSearchPathDomainMask.UserDomainMask)
    var passMusicFileURL: NSURL?

    if let documentPath: NSURL = wayToFile.first as? NSURL {
        let musicFile = documentPath.URLByAppendingPathComponent(objectForPass)
        println(musicFile)
        passMusicFileURL = musicFile
    }
    if segue.identifier == "listenMusic" {
       // playerVC.musicFile = objectForPass
        playerVC.end = passMusicFileURL
    }
}

这篇关于如何从swift的文档目录中获取NSURL的特定文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆