2016-10-20 2 views
1


И только я выполняю делегированный шаблон. Я создал простое приложение, в котором делегат отправляет сообщение UIViewController, говоря, что если вы остановите или запустите UIActivityIndicatorView. К сожалению, я получаю следующую ошибку: ошибка atal: неожиданно найдено nil при развертывании необязательного значения. Казалось бы, что UIActivityIndicatorView не инициализирован. Я не могу понять, где я ошибаюсь.Ошибка делегата и UIActivityIndicatorView

protocol ProgressBarDelegate { 
     func UpdateProgressBar(progress: Bool) 
    } 


    class Dao: NSObject { 

     var delegate: ProgressBarDelegate? 
     override init() { 
      super.init() 
      //DELEGATO 
      //I who should I send the message? to FirstViewController 
      let messaggero = FirstViewController() 
      self.delegate = messaggero 
      scriviUnMessaggio(progress: true) 
     } 
func scriviUnMessaggio(progress: Bool){ 
     print("I'm writing a message ...") 
     delegate?.UpdateProgressBar(progress:progress)  
    } 

Мой контроллер

class FirstViewController: UIViewController,ProgressBarDelegate { 

    @IBOutlet var activity: UIActivityIndicatorView! 

    func UpdateProgressBar(progress: Bool){ 

     print("I received the message from Dao class (the delegate)") 

     switch progress{ 
     case true: 
     // At this point I get the following error:Fatal error: unexpectedly found nil while unwrapping an Optional value 


      self.activity.startAnimating() 
     case false: 
      self.activity.stopAnimating() 
     default: 
      self.activity.startAnimating() 
     } 
    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     let dao = Dao() 

     /// dao.caricamentoDati() 
+0

Вы подсоединили выходной вид деятельности? – rmaddy

+0

(да) компонент правильно подключен в моей раскадровке – Diego

+0

По-видимому, иначе вы бы не получили ошибку. Поместите точку останова на строку 'self.activity.startAnimating()', и вы обнаружите, что 'self.activity' является' nil'. – rmaddy

ответ

1

Проблема заключается в том, что вы создаете новый объект FirstViewController в INIT из Dao. Поскольку объект FirstViewController не создается через xib/раскадровку, значит, розетка не подключена. Вот почему это дает сбой при self.activity.startAnimating()

Установите делегат self в viewDidLoad

изменить метод инициализации DOA как следовать

class Dao: NSObject { 

    var delegate: ProgressBarDelegate? 
    init(delegate: ProgressBarDelegate) { 
    super.init() 
    //DELEGATO 
    //I who should I send the message? to FirstViewController 
    self.delegate = delegate 
    scriviUnMessaggio(progress: true) 
    } 
    func scriviUnMessaggio(progress: Bool){ 
    print("I'm writing a message ...") 
    delegate?.UpdateProgressBar(progress:progress) 
} 

Тогда в viewDidLoad сделать это

override func viewDidLoad() { 
    super.viewDidLoad() 
    let dao = Dao(delegate: self) 
} 
+0

Спасибо за ваш ответ, к сожалению, я получаю ту же ошибку :( – Diego

+0

@Diego Позвольте мне знать, если отредактированный ответ работает на вас –

+0

Извините, я не читал ваше сообщение сейчас, попробуйте – Diego

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