2015-05-18 2 views
0

Я задал этот вопрос один раз раньше, но я чувствую, что я не был настолько тщательным, насколько это возможно. Я пытаюсь выполнить стандартную иерархию иерархии сверла вниз программным способом, а не использовать IB, чтобы избежать ненужного скремблирования из-за того, что у меня есть более 40 различных представлений, которые я хочу реализовать. Я решил использовать следующий переключатель-оператор:Неисправность оператора полного деления

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    var VC: UITableViewController 
    switch indexPath.row { 
    case 0: VC = SecondTableViewController() 
    default:() 
    } 
    navigationController?.pushViewController(VC, animated: true) 
} 

enter image description here

, как вы можете видеть, что это дает мне неинициализированную ошибку, поэтому я затем перейти, чтобы мои переменные необязательным, чтобы решить эту проблему & он компилирует и запускает:

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    var VC: UITableViewController? 
    switch indexPath.row { 
    case 0: VC = SecondTableViewController() 
    default:() 
    } 
    navigationController?.pushViewController(VC!, animated: true) 
} 

enter image description here

однако, когда я выбрать обозначенный ряд (который правильно при значении 0 после запуска в отладчике) она падает с этой ошибкой:

enter image description here

что, кажется, проблема? это оператор по умолчанию в моем коммутаторе? или это переменная в моем методе pushViewController? Могу ли я добавить, когда я изменяю параметр в этом методе из «VC/VC!» к «UITableViewController()», как например:

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    var VC: UITableViewController? 
    switch indexPath.row { 
    case 0: VC = SecondTableViewController() 
    default:() 
    } 
    navigationController?.pushViewController(UITableViewController, animated: true) 
} 

enter image description here

он работает & функции соответственно, но когда вид нажат, она не в TableViewController я обозначенный в моем переключателе заявлении, а затем просто пустой табличный вид. что мне не хватает?

ВОТ КОД ДЛЯ МОЕЙ SecondTableViewController:

импорт UIKit

класс SecondTableViewController: UITableViewController {

var myVariable = ["LIST OF STRINGS IN AN ARRAY"] 

override func viewDidLoad() { 
    super.viewDidLoad() 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 

} 



override func numberOfSectionsInTableView(tableView: UITableView) -> Int { 

    return 1 
} 

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 

    return myVariable.count 
} 


override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("reuseIdentifier", forIndexPath: indexPath) as! UITableViewCell 

    var superVariable = myVariable [indexPath.row] 

    cell.textLabel!.text = superVariable 


    return cell 

} 

}

ответ

1

Проблема заключается в SecondTableViewController, где вы не определили идентификатор для вашей ячейки. Вы должны сделать что-то вроде этого:

class SecondTableViewController: UITableViewController { 

    let theData = ["one", "two", "three", "four"] 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "Cell") 
    } 


    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return theData.count 
    } 


    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! UITableViewCell 
     cell.textLabel?.text = theData[indexPath.row] 
     return cell 
    } 
} 
+0

YESSS THAT WAS IT! спасибо man –

+0

теперь, если я хочу повторно использовать подкласс UITableViewController и просто изменить источник данных вместо создания и инициализации нескольких подклассов? как я об этом? @rdelmar –

+0

@RobertTillman Трудно ответить на этот вопрос абстрактно. Используете ли вы какие-либо пользовательские ячейки для всех контроллеров табличных представлений, которые вы используете сейчас, или используете ли UITableViewCell по умолчанию? Вы перемещаетесь за пределы SecondViewController, или вы только переходите вперед и назад между первым и всеми остальными? Знать что-то о том, какие данные вы имеете в виду, было бы полезно. – rdelmar

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