UberJason
UberJason

Reputation: 3163

PFQuery findObjectsInBackgroundWithBlock: in WatchKit app works in simulator, not on watch unless iOS app is in foreground

I'm writing a WatchKit app which needs to make a query to our Parse server. Because this is a network call, I follow the following procedure:

  1. I make a call from WatchKit to the iOS app using openParentApplication:reply:
  2. Inside of handleWatchKitExtensionRequest:userInfo:reply:, I start a background task with a UIBackgroundTaskIdentifier to ensure the iOS app isn't terminated immediately
  3. I set up my PFQuery and call findObjectsInBackgroundWithBlock:
  4. In the block I pass to the PFQuery, I reply the relevant information to the watch

I wrote this app maybe a month ago before the Apple Watch was out, and it ran just fine in the Watch simulator. Yesterday I received my Apple Watch and I was able to get the app running on the watch, but it doesn't quite work - I managed to figure out that when the iOS app is actively running in the foreground on the iPhone, then everything is great; but if the app is not active (e.g. backgrounded or terminated), then findObjectsInBackgroundWithBlock: never actually calls the block, and execution seems to just stop.

Does anyone have any ideas of what might be going on? My initial thought was that the iOS app is getting suspended/killed before it can complete the query, but I was pretty sure the background task would prevent that.

PS. If anyone stumbles upon this question because they were looking for how to get a WatchKit app running on an actual watch, I found this post extremely helpful in getting it working.

Upvotes: 3

Views: 203

Answers (1)

UberJason
UberJason

Reputation: 3163

Turned out that I had several problems related to openParentApplication:reply:, and they all seem to have been resolved by using the technique from this post:

http://www.fiveminutewatchkit.com/blog/2015/3/11/one-weird-trick-to-fix-openparentapplicationreply

I had started a background task for my own app, but I didn't use the "bogus workaround" background task described in this post, because it wasn't necessary for me in the simulator. On the watch, though, it apparently was.

Upvotes: 3

Related Questions