(在过去的几周里,其他人似乎遇到了这个问题,但我找不到任何解决方案。)
我正在尝试做一个非常基本的事情:从我的iOS应用程序或我的Watch应用程序获取数据到我的复杂控制器。
我发现这样做的能力比我想象的要差。 watchOS 2 Transition Guide表示我应该使用以下代码“[从[@fetch]扩展委托中获取所需数据”:
ExtensionDelegate* myDelegate = [[WKExtension sharedExtension] delegate];
NSDictionary* data = [myDelegate.myComplicationData objectForKey:ComplicationCurrentEntry];
大。除此之外,我还没有弄清楚如何让这个在扩展方面工作。虽然更重要的是,我似乎甚至无法从复杂的控制器启动中获得扩展代理代码。当我运行复杂功能时,我收到此消息:“扩展收到请求以唤醒并发症支持。”但是,任何扩展委托方法中的代码都不会运行。我还在每个方法中设置断点,并且没有任何断点被击中。
它也看起来像“transferCurrentComplicationUserInfo:”也被建议用于复杂的更新,虽然它不清楚它是如何使用的。我收集了它,它用于唤醒手表扩展,以便ExtensionDelegate可以存储下一次复杂控制器运行时的新数据,但由于之前的问题,我无法确认。
我有一个可能的解决方法(从并发症控制器ping服务器并希望会话变量持续存在以便我可以发送相关数据),但是如果我不能解决这个问题,那么我的复杂工作将会很有可能被软管。这里的任何帮助都是巨大的。
顺便说一下,这是我对“getCurrentTimelineEntryForComplication”的代码,如果这对我有帮助的话。
- (void)getCurrentTimelineEntryForComplication:(CLKComplication *)complication withHandler:(void(^)(CLKComplicationTimelineEntry * __nullable))handler {
NSDate* entryDate = [NSDate date];
ExtensionDelegate* myDelegate = [[WKExtension sharedExtension] delegate];
NSString* data = [myDelegate.complicationData objectForKey:@"meow"];
NSLog(@"complication data: %@", data);
CLKComplicationTimelineEntry* entry = [self getTimelineEntry:@"2015-08-25 00:19:42" entryDate:entryDate complication:complication];
handler(entry);
}
答案 0 :(得分:8)
自Xcode 7 Beta 4以来,我一直在使用WatchOS2中的并发症。我现在使用最新的Xcode Beta 6.我在两个Beta版本中都遇到了很多问题在Watch上,在iPhone上运行然后安装到Watch,并且在模拟器上运行经常会出现假阴性,因为看起来有些错误的API和OS版本。我已经能够通过以下方式获得有关并发症的数据。
如果遇到问题,可以尝试以下调试方法。如上所述,API和操作系统似乎非常错误。 执行以下步骤(有时)。
我希望有所帮助!
贾斯汀
答案 1 :(得分:-1)
为了使ComplicationController响应WCSession活动,您必须使控制器符合WCSessionDelegate,然后从ComplicationController中管理didReceiveUserInfo。在后台,ExtensionDelegate不会因这些更新而被唤醒。如有必要,您仍然可以从控制器更新您的代理。
此外,截至目前,模拟器不会将transferCurrentComplicationUserInfo发送到手表模拟器,您必须在设备上进行测试。