У меня есть UITableView VC, для которого ячейки связаны с функцией подготовки к переходу, и это работает. он перемещается в правильный VC. Я добавил rightBarButtonItem в элемент навигации, который я связал с методом, вызывающим PerformForSegue, и дал ему правильный идентификатор. Все работает нормально, пока я не нажму правую боковую кнопку. Когда я это делаю, я получаю: «Стек вызовов первого броска. Завершение с необработанным исключением типа NSException». Может ли кто-нибудь помочь мне и указать мне правильное направление, пожалуйста? Код и распечатайте список ниже. Спасибо.
class AssignNumberOfRoomsForFloorsVC: UITableViewController {
//MARK: - Properties
private var managedObjectContext: NSManagedObjectContext!
private var storedFloors = [Floors]()
//MARK: - Actions
override func viewDidLoad() {
super.viewDidLoad()
managedObjectContext = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
loadFloorData()
self.tableView.reloadData()
self.navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.done, target: self, action: Selector(("navigateToNextViewController")))
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
private func loadFloorData() {
let request: NSFetchRequest<Floors> = Floors.fetchRequest()
request.returnsObjectsAsFaults = false
do {
storedFloors = try managedObjectContext.fetch(request)
}
catch {
print("could not load data from core \(error.localizedDescription)")
}
}
private func navigateToNextViewController(){
self.performSegue(withIdentifier: "room and alarm type", sender: self)
}
// MARK: - Table view data source
override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return storedFloors.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "floor cell", for: indexPath) as! FloorCell
let floorItem = storedFloors[indexPath.row]
cell.floorNumberTxt.text = String(floorItem.floorNumber)
return cell
}
// MARK: - Navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
var selectedRow = self.tableView.indexPathForSelectedRow
let floorItem = storedFloors[(selectedRow?.row)!]
let destinationController = segue.destination
if let assignRoomsVC = destinationController as? DeclareRoomsVC {
if let identifier = segue.identifier {
switch identifier {
case "assign number of rooms":
let _ = assignRoomsVC.view
assignRoomsVC.floorNumberTxt.text = String(floorItem.floorNumber)
assignRoomsVC.selectedFloor = floorItem.floorNumber
default: break
}
}
}
}
}
Это сообщение в консоли:
2017-03-26 21:50:28.041 PDCiPad[10433:292572] -[PDCiPad.AssignNumberOfRoomsForFloorsVC navigateToNextViewController]: unrecognized selector sent to instance 0x7ff5b7c326c0
Когда вы нажимаете на
class AssignNumberOfRoomsForFloorsVC: UITableViewController {
//MARK: - Properties
private var managedObjectContext: NSManagedObjectContext!
private var storedFloors = [Floors]()
//MARK: - Actions
override func viewDidLoad() {
super.viewDidLoad()
managedObjectContext = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
loadFloorData()
self.tableView.reloadData()
self.navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.done, target: self, action: Selector(("navigateToNextViewController")))
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
private func loadFloorData() {
let request: NSFetchRequest<Floors> = Floors.fetchRequest()
request.returnsObjectsAsFaults = false
do {
storedFloors = try managedObjectContext.fetch(request)
}
catch {
print("could not load data from core \(error.localizedDescription)")
}
}
private func navigateToNextViewController(){
self.performSegue(withIdentifier: "room and alarm type", sender: self)
}
// MARK: - Table view data source
override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return storedFloors.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "floor cell", for: indexPath) as! FloorCell
let floorItem = storedFloors[indexPath.row]
cell.floorNumberTxt.text = String(floorItem.floorNumber)
return cell
}
// MARK: - Navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
var selectedRow = self.tableView.indexPathForSelectedRow
let floorItem = storedFloors[(selectedRow?.row)!]
let destinationController = segue.destination
if let assignRoomsVC = destinationController as? DeclareRoomsVC {
if let identifier = segue.identifier {
switch identifier {
case "assign number of rooms":
let _ = assignRoomsVC.view
assignRoomsVC.floorNumberTxt.text = String(floorItem.floorNumber)
assignRoomsVC.selectedFloor = floorItem.floorNumber
default: break
}
}
}
}
, 2017-03-26 21:50:28.041 PDCiPad[10433:292572] -[PDCiPad.AssignNumberOfRoomsForFloorsVC navigateToNextViewController]: unrecognized selector sent to instance 0x7ff5b7c326c0
становится _3_, потому что вы используете _4_ и не выбрали ни одной строки.