Apple Watch - 仅在手机上的应用处于活动状态时获取数据

Out*_*812 4 iphone objective-c ios apple-watch

我使用模拟器开发并部署了Apple Watch Extension App.它已获得批准,现在可在应用程序商店购买,因此Apple很高兴!

今天我能够亲身体验并发现了一个真正的问题 - 如果手机上的应用程序不仅仅是打开的,而且还是活动的,那么我只能与手机进行交互......从而打败了对象.

appDelegate在手机应用程序中实现以下方法作为代理,以获取我的实时数据并将其返回到手表.

我基本上将请求传递给appDelegate- 我检查userInfo应该返回哪些数据,然后手机应用程序执行业务并返回包含要解析的手表数据的userInfo字典:

-(void)application:(UIApplication *)application handleWatchKitExtensionRequest:(NSDictionary *)userInfo reply:(void (^)(NSDictionary *))reply {

if ([userInfo objectForKey:@"GetWatchData"]) {

    [TPWatchData configureWatchData:^(BOOL success) {

        if (success) {

            reply([TPWatchData watchData]);

        } else {

            reply(@{@"FAIL":@"AppDelegate"});

        }


    }];

}

}
Run Code Online (Sandbox Code Playgroud)

我在手表上使用这种方法调用它watch extension(只是我调用的一个例子):

    [TPWPlanList openParentApplication:@{@"GetWatchData":@1} reply:^(NSDictionary *replyInfo, NSError *error) {

    if ([replyInfo objectForKey:@"Overview"]) {

        if (error.code == 0) {

            if ([replyInfo objectForKey:@"FAIL"]) {

                // Something failed

            } else {

                self.dic_overview = [replyInfo objectForKey:@"Overview"];

                //[self reloadPlanListTable];

            }

        } else {

            // Something failed

        }

    }

}];
Run Code Online (Sandbox Code Playgroud)

如前所述,这在模拟器中完美运行,并且实际上在物理手表上完美运行 - 但仅限于我在手机上打开主应用程序并激活.应用程序在后台或手机显示屏休眠的那一刻,使用上述方法不会传递任何数据.

有什么想法吗?我显然做错了什么,但是我已经设法在整个事情发生之前和现实设备上达到了这一点,然后才被我咬了.

非常感谢!

bgi*_*ham 5

如果您的openParentApplication:reply:方法仅在主机iOS应用程序处于活动状态时有效,我几乎可以保证您的iOS应用程序在它有机会回复之前在后台被杀死.

解决方案是让应用程序尽快响应请求,然后完成正常任务.在开发人员论坛中有关于此的说明:https://devforums.apple.com/thread/264473?tstart = 0

我还写了一篇博客文章,详细介绍了我在论坛添加说明之前使用的方法:http://www.fiveminutewatchkit.com/blog/2015/3/11/one-weird-trick-to-fix- openparentapplicationreply