2015-03-20 2 views
0
@IBAction func DoneButton(sender: AnyObject) { 
    self.dismissViewControllerAnimated(true, completion: nil) 
    let viewController = self.storyboard?.instantiateViewControllerWithIdentifier("ViewController") as UIViewController 
    viewController.viewWillAppear() 
} 

Его предполагают, чтобы отклонить мою текущую позицию и перезагрузить ViewControllerКак убрать текущий вид и перезагрузить другой?

, но он падает с фатальной ошибкой: неожиданно

found nil while unwrapping an Optional value 

это потому, что я отклоняя раньше?

+0

Что вы подразумеваете под «перезагрузкой»? Перезагрузка подразумевает, что вы хотите загрузить существующий контроллер просмотра ... снова. Ваш код создает новый контроллер представления, а не перезагружает его. –

+0

, если вы хотите представить новый контроллер представления после отклонения вашего текущего, просто представите контроллер для создания экземпляра. было бы важно представить из блока завершения, что вы отклоняете действие. –

+0

Я получил его работу с использованием опции 3 (см. Ниже) –

ответ

0

Я думал сделать либо

1.

let viewController = ViewController() 

    viewController.viewWillAppear(false) 

2.

В среднем классе:

let viewController = ViewController() 

    viewController.shouldRefresh = true 

В основном классе:

var shouldRefresh: Bool! 

override func viewWillAppear(animated: Bool) { 

    if shouldRefresh == true { 

    } 
} 

3.

В среднем классе:

let viewController = ViewController() 

    viewController.reloadRoutineData() 

В основном классе:

func reloadRoutineData() { 

// Do my stuff here 
} 

Третий вариант мой переменный, потому что мне нужно сделать только определенный код, на самом деле не перезагрузите вид полностью. Но все они рушится ноль при разворачивании.

0

Звонок instantiateViewControllerWithIdentifier() возвращает необязательный. Поэтому, если контроллер просмотра с указанным идентификатором не может быть найден в вашем раскадровке, он будет установлен на нуль, и следующая строка, в которой вы вызываете viewWillAppear, выйдет из строя.

Возможно также, что вы столкнулись внутри viewWillAppear фактически. Это не метод, который должен вызывать вам. Вместо этого UIKit вызовет этот метод для вас, когда будет представлен ваш контроллер просмотра.

Я предполагаю, что вы пытаетесь сделать что-то вроде этого:

if let viewController = self.storyboard?.instantiateViewControllerWithIdentifier("ViewController") as UIViewController { 
    self.presentViewController(viewController, 
     animated: true, completion: nil) 
} 

Если нет, то предоставить больше контекста на ваш вопрос.

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