2015-03-06 2 views
0

Я пытаюсь выполнить segue и передать звуковой сигнал audioNSURL на мой следующий viewController. Проблема, которая у меня есть, заключается в том, что в моем segue «indexPath» имеет значение null (не наследует значение tapped из tableView). Может кто-то указать мне верное направление?indexPath переменная, не наследующая значение

// 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 
     } 

    } 
} 
+1

Calling deselectRowAtIndexPath до того performSegueWithIdentifier, вероятно, делает indexPathForSelectedRow возврата ноль. Если вы сначала вызываете функцию performSegue, она должна работать. – dan

ответ

0

Вы можете отправить indexPath из выбранной ячейки в качестве объекта-отправителя в методе performSegueWithIdentifier, так как вы не используете его на всех. Тогда в 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 
     } 

    } 
} 
Смежные вопросы