Search code examples
iosswiftcocoa-touchuiviewcontrollertoday-extension

How to send and receive data in Today extensions


I want to develop an app for iOS that have a Widget for notification center, but I don't know how I should send and receive data (pass data) between View Controller and And Today Extension.

I tried to use structs, but it doesn't work, and also I used app groups but I don't want to use this method.

let shared = NSUserDefaults(suiteName: "group.Demo.Share-Extension-Demo.mahdi")
shared?.setObject("Hello", forKey: "kkk")

Solution

  • Apart from NSUserDefaults, you can use the NSNotificationCenter to send or receive data anywhere.

    You need to set the observer where you can receive the data like below:

    override func viewDidLoad() {
        super.viewDidLoad()
    
        NSNotificationCenter.defaultCenter().addObserver(self, selector: "dataReceived:", name: "SpecialKey", object: nil)    
    }
    

    Funciton to catch data:

    func dataReceived(notification: NSNotification) {
        //deal with notification.userInfo
        println(notification.userInfo)
    
        println("Received Data")
    }
    

    And you need to define NSNotificationCenter from where you need to send the data:

    NSNotificationCenter.defaultCenter().postNotificationName("SpecialKey", object: nil, userInfo: ["MyData": "Demo"])
    

    References:

    The complete guide to NSNotificationCenter

    Hope it helps!

    http://moreindirection.blogspot.in/2014/08/nsnotificationcenter-swift-and-blocks.html