R21
R21

Reputation: 396

Is it possible to automatically fetch parse objects?

Many im services automatically display messages once the user on the other end has sent a message.

Right now, the only way I can think of to do this is to use an nstimer which will run the appropriate block of code which fetches the messages and updates the table view. This is resources intensive and can waste one of the requests per second. Is there any way to automate this process and make it happen only when a new message has been sent/received?

Upvotes: 0

Views: 20

Answers (1)

Russell
Russell

Reputation: 3089

Here's an example of using didReceiveRemoteNotification inside of your app delegate to respond to push notifications. In particular, you care about the case where you are receiving the notification while the app is active.

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) {

    if (PFUser.currentUser() == nil) {
        return
    }

    if (application.applicationState == UIApplicationState.Inactive || application.applicationState == UIApplicationState.Background) { 
        // Received the push notification when the app was in the background
        PFAnalytics.trackAppOpenedWithRemoteNotificationPayload(userInfo)

        // Inspect userInfo for the push notification payload
        if let notificationPayloadTypeKey: String = userInfo["someKey"] as? String {
            // Do something
        }
    } else {
        // Received the push notification while the app is active
        if let notificationPayloadTypeKey: String = userInfo["someKey"] as? String {
            // Use NSNotificationCenter to inform your view to reload
            NSNotificationCenter.defaultCenter().postNotificationName("loadMessages", object: nil)
        }
    }
}

Then you just need to add a listener inside of your view controller. Inside of viewDidLoad add the following which will call the function loadMessages whenever a notification is received.

NSNotificationCenter.defaultCenter().addObserver(self, selector: "loadMessages", name: "loadMessages", object: nil)

If you download the code for Parse's Anypic example project you can see how they handle remote notifications.

Upvotes: 1

Related Questions