2015-08-21 2 views
0

Я пытаюсь создать PushListener, который предпримет действие после получения определенного нажатия.PushListener на фоне Swift

Например, когда сервер отправляет push, например «UPDATE TIMER 5», приложение iOS обновит TIMER до 5 секунд.

Я не смог найти примеры кода, которые делают это, но я читал блоги, где люди говорят, что они это сделали.

Любые подсказки о том, как это сделать или где искать пример кода?

+0

Почему вы не отправляете уведомление? через NotificationCenter –

ответ

0

Ну, решение - это уведомления. Например, у вас есть класс:

class NotificationExampleClass { 
    var stringUpdatedByNotification: String = "" 
} 

Итак, основная идея уведомления является обновить некоторое значение (в нашем случае stringUpdatedByNotification) сразу же, когда мы хотим (когда мы размещаем уведомление).

Перед тем, как отправлять уведомления, нам нужно добавить addObserver/removeObserver и функции, которые получают уведомление:

class NotificationExampleClass { 
    var stringUpdatedByNotification: String = "" 

    init() { 
     NSNotificationCenter.defaultCenter().addObserver(self, 
      selector: "updateNotificationString:", // method called when notification have been received 
      name: "notificationId", 
      object: nil) 
    } 

    deinit { 
     NSNotificationCenter.defaultCenter().removeObserver(self, 
      name: "notificationId", 
      object: nil) 
    } 

    func updateNotificationString(notification: NSNotification) { 
     let userInfo = notification.userInfo as! [String: String] // or unwrap to your custom key value pair type 
     stringUpdatedByNotification = userInfo["myKey"]! 
    } 
} 

А теперь мы просто должны установить наш userInfo словарь и почтовое уведомление:

func postNotification() { 
    let userInfo = ["myKey" : "notificationPostValue"] 
    NSNotificationCenter.defaultCenter().postNotificationName("notificationId", object: userInfo) 
} 

и наш stringUpdatedByNotification равен строке "notificationPostValue".

Не стесняйтесь обновлять код в своих ситуациях. Удачи.

Update:

Конечно, передать словарь, как [String: String] к userInfo более Obj-C способ сделать это вещи. В Swift (и в вашем конкретном случае) вы можете перейти на userInfo все, что подтвердите на [NSObject : AnyObject]?, потому что userInfo объявлено как var userInfo: [NSObject : AnyObject]? { get }. Так что, когда вы создаете что-то вроде уведомления потока управления, я предлагаю вам создать enum для него:

А теперь перейдем к userInfo это ["myKey": .UpdateToFiveSeconds].
В этом случае вы можете получить TimeControl объект через notification.userInfo["key"], а не строку и избежать ошибки в String значение.

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