indexPath 变量不继承值

indexPath variable not inheriting value

我正在尝试执行 segue 并将点击的 'audioNSURL' 传递给我的下一个 viewController。我遇到的问题是,在我的 segue 中,'indexPath' 为 null(不从 tableView 继承 tapped 值)。谁能指出我正确的方向?

// Function for when cell is tapped in tableView
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    var sound = self.sounds[indexPath.row]
    var baseString : String = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)[0] as String
    var pathComponents = [baseString, sound.url]
    var audioNSURL = NSURL.fileURLWithPathComponents(pathComponents)!

    tableView.deselectRowAtIndexPath(indexPath, animated: true)
    self.performSegueWithIdentifier("tableViewToPlayerSegway", sender: self)
}

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "tableViewToPlayerSegway" {

    var secondScene = segue.destinationViewController as PlayViewController

        if var indexPath = self.tableView.indexPathForSelectedRow() {

        var sound = self.sounds[indexPath.row]
        var soundName = sound.name
        var baseString : String = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)[0] as String
        var pathComponents = [baseString, sound.url]
        var audioNSURL = NSURL.fileURLWithPathComponents(pathComponents)!
        secondScene.currentSound = audioNSURL
        secondScene.soundName = sound.name
        }

    }
}

您可以在 performSegueWithIdentifier 方法中将所选单元格的 indexPath 作为发件人对象发送,因为您根本没有使用它。然后在 prepareForSegue 解包并将发送者转换为 NSIndexPath 并使用它将数据传递给下一个控制器

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    var sound = self.sounds[indexPath.row]
    var baseString : String = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)[0] as String
    var pathComponents = [baseString, sound.url]
    var audioNSURL = NSURL.fileURLWithPathComponents(pathComponents)!

    tableView.deselectRowAtIndexPath(indexPath, animated: true)
    self.performSegueWithIdentifier("tableViewToPlayerSegway", sender: indexPath)
}

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "tableViewToPlayerSegway" {

    var secondScene = segue.destinationViewController as PlayViewController

        if var indexPath = sender as? NSIndexPath {

        var sound = self.sounds[indexPath.row]
        var soundName = sound.name
        var baseString : String = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)[0] as String
        var pathComponents = [baseString, sound.url]
        var audioNSURL = NSURL.fileURLWithPathComponents(pathComponents)!
        secondScene.currentSound = audioNSURL
        secondScene.soundName = sound.name
        }

    }
}