У меня есть UITableViewController
и два UIViewController
. Каждый контроллер имеет UINavigationController
. Я сделал два segue первый от UITableViewCell
, а второй от UIBarButtonItem
с помощью раскадровки. Когда я перехожу из UITableViewCell
, у меня есть успех, но когда я перехожу от UIBarButtonItem
, я получаю сообщение об ошибке «фатальная ошибка: неожиданно найден nil при распаковке необязательного значения». ошибка segue в Xcode 6
Еще я сделал код в коде. Этот код
@IBAction func addMusic(sender: UIBarButtonItem) {
performSegueWithIdentifier("addMusic", sender: self)
}
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
tableView.selectRowAtIndexPath(indexPath, animated: true, scrollPosition: UITableViewScrollPosition.None)
performSegueWithIdentifier("listenMusic", sender: nil)
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
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 currentTrackPath = tableView.indexPathForSelectedRow()!
var allIndexTable = tableView.indexPathsForVisibleRows()! as! [NSIndexPath]
var currentIndexPath = tableView.indexPathForSelectedRow()!.row
if segue.identifier == "listenMusic" {
var playerVC = (segue.destinationViewController as! UINavigationController).topViewController as! PlayMusicViewController
playerVC.nameMusicFile = nameOfObjectForPass // name
playerVC.mp3URL = passMusicFileURL
// test
playerVC.currentPath = currentTrackPath
playerVC.allIndex = allIndexTable
//
playerVC.currentIndex = currentIndexPath
// variant the second
var curRow = tableView.indexPathForSelectedRow()!.row
playerVC.arrayOfMP3 = listOfMP3Files
playerVC.currentRow = curRow
} else if segue.identifier == "add" {
var avc = (segue.destinationViewController as! UINavigationController).topViewController as! AddViewController
}
}
Можете ли вы показать нам код внутри '' переопределение функ prepareForSegue (Segue: UIStoryboardSegue, отправитель: AnyObject?) '' ' –
В Tableview: didSelectRowAtIndexPath' вы повторного выбора строки? Зачем? С другой стороны, я не уверен, что это напрямую связано. Вы нажали Ctrl + Drag с кнопки или прямо с контроллера? Если вы сделали это с помощью кнопки, вам не нужно создавать розетку и выполнять сеанс. Может быть, вы выполняете сеге дважды в этом случае. Другое, что я вижу здесь, также в том, что у вас есть два контроллера навигации в одном стеке. Поскольку Song View View Controller уже находится в контроллере навигации, вам не нужно нажимать другой контроллер навигации в стеке. – Legoless
@ JulianJ.Tejera Да, я могу – Alexander