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
}