NSNotificationCenter не отправляет сообщение в Swift

Я использую Core Spotlight, и я использую UIPageController как RootViewController и несколько UIViewControllers, Каждый контроллер имеет UIView Я рисую круг информации там. Когда я перемещаюсь между контроллерами и открываю новый контроллер, я отправляю NSNotification от текущего UIViewController к текущему UIView, который расположен на текущем UIViewController, Я отправил NSNotification что так включить NSTimer в UIView для обновления информации. Это работает нормально, когда я просто открываю приложение. Моя проблема, когда я нахожу информацию из приложения в поиске прожектора и открываю нужный контроллер из поиска прожектора NSNotification не отправлено Я пробовал несколько разных методов, и я не могу найти, как я могу это сделать. Подскажите пожалуйста, как мне это сделать?

ОБНОВЛЕНИЕ Я также попробовал шаблон синглтона для NSNotificationCenter но это также не помогло мне.

ОБНОВЛЕНИЕ Я попытался написать Selector как notificationCenter.addObserver(self, selector: Selector(turnOnMemoryTimer()), name: "turnOnMemoryArc", object: nil) и он работает, когда я запускаю приложение из поиска в центре внимания, но не работает, когда я просто запускаю приложение. За любую помощь в этом вопросе спасибо!

Я также пытался отправить уведомление от AppDelegate, но это также не сработало

 switch startIndex {
        case 1:
            notificatioCenter.postNotificationName("turnOnCPUTimer", object: nil)
        default: break
        }

UIViewController

override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(true)
    if GlobalTimer.sharedInstance.controllerTimer != nil {
        GlobalTimer.sharedInstance.controllerTimer.invalidate()
        GlobalTimer.sharedInstance.viewTimer.invalidate()
    }
    GlobalTimer.sharedInstance.controllerTimer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: "showMemory", userInfo: nil, repeats: true)
    // notifications

    notificationCenter.postNotificationName("turnOnMemoryArc", object: nil) // this message doesn't sent

    if UIDevice.currentDevice().userInterfaceIdiom == .Pad {
        notificationCenter.postNotificationName("checkMemoryOrientation", object: nil)
        notificationCenter.addObserver(self, selector: "changeMemoryOrientation", name: UIDeviceOrientationDidChangeNotification, object: nil)
    }
}

UIView

// MARK: - var and let
    var arc = Arc()
    let notificationCenter = NSNotificationCenter.defaultCenter()
    var boolForMemoryArc = false


       override func drawRect(rect: CGRect) {
        if boolForMemoryArc == false {
            drawMemoryArc()
            boolForMemoryArc = true
        }
        notificationCenter.addObserver(self, selector: "turnOnMemoryTimer", name: "turnOnMemoryArc", object: nil)
        notificationCenter.addObserver(self, selector: "changedMemoryOrientation", name: "checkMemoryOrientation", object: nil)
    }

    func turnOnMemoryTimer() {
        if GlobalTimer.sharedInstance.viewTimer != nil {
            GlobalTimer.sharedInstance.viewTimer.invalidate()
        }
        GlobalTimer.sharedInstance.viewTimer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: "drawMemoryArc", userInfo: nil, repeats: true)
    }

2 ответа

Решение

У меня была похожая проблема, и я решил ее так:

notificationCenter.addObserver(self, selector: "turnOnMemoryTimer:", name: "turnOnMemoryArc", object: nil)

Получить AnyObject:

func turnOnMemoryTimer(notification: AnyObject) {

}

Это необходимое изменение произошло "спонтанно", нормальный код работал месяцами.

Я думаю, вам нужно добавить NSNotification в качестве параметра к функции, которую вы вызываете. Итак, два твика:

notificationCenter.addObserver(self, selector: "turnOnMemoryTimer:", name: "turnOnMemoryArc", object: nil)

а также

func turnOnMemoryTimer(notification: NSNotification) {
    // function body
}
Другие вопросы по тегам