2015-06-25 7 views
0

У меня есть функция в моем делете приложения, которая добавляет элемент в массив в моем файле с именем ViewController.swift, а затем я хочу перезагрузить табличное представление в том же файле. Я пытаюсь сделать это следующим образом:Root View Controller Swift

let vc = ViewController() 
let navigationController = UINavigationController(rootViewController: vc) 
window!.rootViewController = navigationController 
println(vc.messages) 

//1  vc.messages.append(message.data.message as! String) 
//2  vc.MessageTableView?.reloadData() 

Строки, пронумерованные 1,2, где я устанавливаю точки останова. Оказывается поломкам после строки пронумерованы 2.

Точная ошибка, я получаю

fatal error: unexpectedly found nil while unwrapping an Optional value

Я считаю, что моя проблема в том, что я устанавливаю контроллер представления корня неправильно.

Редактировать # 1

Окно объявлено вверху.

Если я запускаю мой код так:

let vc = ViewController() 
    messages.append(message.data.message as! String) 
    vc.MessageTableView?.reloadData() 
    println(messages) 

Тогда я могу видеть, что правильно данные помещаются в массив (который я сделал глобальный для этого сценария), но таблица не обновляется в Просмотреть контроллер.

+0

Где произносится 'window'? Initialized? – nhgrif

+0

Предполагая, что у вас есть экземпляр UIWindow, единственная возможная причина заключается в том, что для сообщения message, message.data или message.ata есть значение nil, как указывает ошибка. –

ответ

0

Какова реализация функции вашего делегата? После того, как вы разместили табличное представление в раскадровке, вам нужно подключить табличное представление к ViewController.swift. Управлять перетаскиванием из таблицы в верхнюю часть диспетчера view (yellowcircle), появится черное всплывающее окно, сделайте это два раза и каждый раз нажимайте на источник данных и делегат. Затем в файле viewcontroller.swift реализуются функции, которые они показывают в этом учебнике. Вам не нужно изменять файл AppDelegate.swift!

https://www.weheartswift.com/how-to-make-a-simple-table-view-with-ios-8-and-swift/

+0

Какой протокол мне нужен? В настоящее время все, что у меня есть, - это класс @UIApplicationMain AppDelegate: UIResponder, UIApplicationDelegate, – Justin

+0

, вы должны поместить все свои функции в ViewController.быстро, и если вы хотите перезагрузить после первой загрузки, у вас может быть кнопка для запуска функции, которая вызывает перезагрузку. Но в первый раз, когда вы хотите просмотреть свой планшет, просто реализуйте представление таблицы в ViewController.swift. – Jaimy

+0

Сколько у вас сцен? это всего лишь один uiviewcontroller с uitableview внутри него? – Jaimy

0

Вы должны перезагрузить данные внутри ViewController Поместите перезарядку внутри viewDidAppear() или СТГ, как этот

Это ошибка, потому что вы просто init контроллер, но ваш views еще не готов, они инициализируются. После viewDidLoad, вы можете позвонить своему views, но не раньше.

Так вот почему ваш table является nil

Кроме того, почему вы должны перезагрузить ваш table, даже если вы не видите его, не так ли?

+0

Это не исправить. и я вижу таблицу, в которой эта функция существует в моем делете приложения, а не на другом представлении. – Justin

0

, если вы хотите, вы ViewController быть RootViewController аль вам нужно сделать, это нажать на ViewController в раскадровку, а затем в Утилиты-> атрибуты инспектор -> установите флажок «является первоначальный вид контроллера»

https://www.dropbox.com/s/qfd9jqeos7ueq1w/Screen%20Shot%202015-06-25%20at%207.40.46%20PM.png?dl=0

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