2015-10-29 1 views
0

В моей раскадровке есть несколько ViewControllers, и есть фоновый поток, который используется для приема сообщения с сервера, фоновый поток и ViewControllers находятся в разных классах.Есть ли способ связи между фоновым потоком и текущим viewcontroller в swift?

В соответствии с полученным сообщением, я хочу передать сообщение указанному ViewController, я использовал Handler для выполнения этой задачи в Android, но как это сделать быстро?

+1

Просьба ввести код – anhtu

+0

Использование Наблюдатели для эффективного взаимодействия с контроллерами View – good4pc

ответ

1

Depends , у вас есть много вариантов. Как вы управляли своим соединением?

  1. вы можете использовать делегирование (обращая внимание, чтобы делегат вызов на главном потоке), если вам нужно 1.1 связи
  2. вы можете использовать NSNoticationCenter и зарегистрировать свои контроллеры просматривать на конкретные уведомления, которые вы будете генерировать основанный на ответе сервера, (обращая внимание на публикацию их на основной теме). Хорошо, если вам нужно 1. * связь
  3. вы можете даже использовать GCD блоки (обращая внимание на их называют в основном потоке)

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

0

Вы можете попробовать использовать Foundation.NSNotification

0

U может достичь этого с помощью Notification.

В вашем фоновом потоке, как только вы получите сообщение от сервера, отправить сообщение, как этот

dispatch_async(dispatch_get_main_queue(), { 
     NSNotificationCenter.defaultCenter().postNotificationName("NotificationIdentifier", object: nil) 
    }) 

и зарегистрировать Notification Observer на вашем каждого ViewController класса

как этот

class A:UIViewController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     NSNotificationCenter.defaultCenter().addObserver(self, selector: "UpdateValues", name: "NotificationIdentifier", object: nil) 
    } 

    func UpdateValues(){ 
     // put your code 
    } 

}