如何在1秒延迟或发送asyn后发布通知?

时间:2016-06-03 11:48:38

标签: swift notifications

我只想在加载视图后调用方法。我已将通知设置为一个视图,并将后通知设置到其他视图,您将从我的代码中获得更多想法..这是我的代码..

在one.swift文件中

override func viewDidLoad() {
            super.viewDidLoad()
        NSNotificationCenter.defaultCenter().addObserver(self, selector: "InsertNote:", name: "insert", object: nil)

        }

func InsertNote(notification:NSNotification)
     {
    println("blablalbla")
 }

在second.swift文件中

override func viewDidLoad() {
        super.viewDidLoad()
        var timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("getData"), userInfo: nil, repeats: false)
    }
    func getData()
    {
    NSNotificationCenter.defaultCenter().postNotificationName("insert", object: nil)
}

我也尝试过dispatch_asynch,但它仍然不起作用。

2 个答案:

答案 0 :(得分:0)

试试这个

let delayInSeconds: Double = 1

override func viewDidLoad() {
    super.viewDidLoad()

    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64(delay * Double(NSEC_PER_SEC))), dispatch_get_main_queue()){
        NSNotificationCenter.defaultCenter().postNotificationName("insert", object: nil)
    }
}

答案 1 :(得分:0)

我能想出这个不起作用的唯一原因是,当您使用第二个ViewController B发送通知时,您的第一个ViewController A已经被释放。因此,您正在使用B正确发送通知,但是A无法接收它。

您也可以通过在B中添加观察者来测试它。

override func viewDidLoad() {
    super.viewDidLoad()
    var timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("getData"), userInfo: nil, repeats: false)
        NSNotificationCenter.defaultCenter().addObserver(self, selector: "insertNote:", name: "insert", object: nil)
}

func getData() {
    NSNotificationCenter.defaultCenter().postNotificationName("insert", object: nil)
}

func insertNote:(note: NSNotification) {
    print("Banana")
}

// Should print 'Banana' after one second.