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
}
}
}
我正在尝试执行 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
}
}
}