swift 如何在另一个 UIViewController 中更改 NSIndexPath

How to change NSIndexPath in another UIViewController in swift

我从特定文件的 UITableViewControllerNSIndexPath 得到 NSIndexPath 数组。我从 NSIndexPath 数组中的文档文件夹中获取 mp3 文件,并从 NSIndexPath 文件中的 UITableViewCell 的选定行中获取特定文件。

我想切换 mp3 文件,因为它需要更改播放音乐的 UIViewController 中的 NSIndexPath。或者是否有不同的方法从文档文件夹切换 mp3 文件?

UITableViewController代码

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    var playerVC = (segue.destinationViewController as! UINavigationController).topViewController as! PlayMusicViewController
    var indexPath = tableView.indexPathForSelectedRow()
    var nameOfObjectForPass = listOfMP3Files![indexPath!.row] // default it's name and
    var fileManager = NSFileManager.defaultManager()

    var wayToFile = fileManager.URLsForDirectory(NSSearchPathDirectory.DocumentDirectory, inDomains: NSSearchPathDomainMask.UserDomainMask)
    var passMusicFileURL: NSURL? // for pass mp3

    if let documentPath: NSURL = wayToFile.first as? NSURL {
        let musicFile = documentPath.URLByAppendingPathComponent(nameOfObjectForPass)
        println(musicFile)
        passMusicFileURL = musicFile
    }

    var currentTrackIndex = tableView.indexPathForSelectedRow()!

    var allIndexTable = tableView.indexPathsForVisibleRows()! as! [NSIndexPath]

    if segue.identifier == "listenMusic" {
        playerVC.nameMusicFile = nameOfObjectForPass // name
        playerVC.mp3URL = passMusicFileURL

        // test 

        playerVC.currentIndex = currentTrackIndex

        playerVC.allIndex = allIndexTable
    }
}

UIViewController代码

var currentIndex: NSIndexPath!
var allIndex = [AnyObject]() as! [NSIndexPath]

func playNextSound() {
    println("index \(currentIndex)")

    println("all object \(allIndex)")
    var indextFound = find(allIndex, currentIndex)        
    println("index found \(indextFound)")

}

播放音乐的代码

 func playMusic() {
    AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, error: nil) // == true
    AVAudioSession.sharedInstance().setActive(true, error: nil)
    var error: NSError?
    audioPlayer = AVAudioPlayer(contentsOfURL: mp3URL, error: &error)
   // audioPlayer.prepareToPlay()
    if currentPause == nil {
    } else {
        audioPlayer.currentTime = currentPause
    }
    //
    audioPlayer.volume = 0.5
    audioPlayer.play()
}

我在控制台中得到以下结果

index {length = 2, path = 0 - 0} 是当前对象

都是文件夹中的对象 所有对象 [ {length = 2, path = 0 - 0}, {length = 2, path = 0 - 1}]

var newURL: NSURL!
@IBAction func nextTrack(sender: UIButton) {
    println("touched next")
    var nowRow: Int = self.currentRow
    var maxCount = self.arrayOfMP3.count-1 // -1
    if nowRow < maxCount {
        nowRow = self.currentRow++
        println("plus")
    } else if nowRow == arrayOfMP3.endIndex {
        nowRow = maxCount
        println("equals")
    }
    // for play/pause button setting 
    currentPause = nil
    //println("current pause\(currentPause)")
    next = false
    //

    println("current row \(currentRow)")
    println("end index \(arrayOfMP3.endIndex)")

    var nextTrack = arrayOfMP3![nowRow]

    var nextDirectory = fileManager.URLsForDirectory(NSSearchPathDirectory.DocumentDirectory, inDomains: NSSearchPathDomainMask.UserDomainMask)

    if var nextURL: NSURL = nextDirectory.first as? NSURL {
        newURL = nextURL.URLByAppendingPathComponent(nextTrack)
    }

    var nameArtist: String!
    var nameSong: String!
    var imageString: NSData!

    var itemPlayer = AVPlayerItem(URL: newURL)

    var listMetaData = itemPlayer.asset.commonMetadata as! [AVMetadataItem]
    for item in listMetaData {
        if item.commonKey == "title" {
            nameSong = item.stringValue
        }
        if item.commonKey == "artist" {
            nameArtist = item.stringValue
        }
        if item.commonKey == "album" {
            item.stringValue
        }
        if item.commonKey == "artwork" {
            imageString = item.dataValue
        }
    }

    nameLabel?.text = "\(nameArtist) \(nameSong)"
    if imageString != nil {
        imageView?.image = UIImage(data: imageString)
    } else {
        imageView?.image = nil
    }
    tapButtonPlay = false
    playMusic()
}