gpt4 book ai didi

apple-watch - 获取复杂数据 : ExtensionDelegate not Called

转载 作者:行者123 更新时间:2023-12-04 14:42:53 26 4
gpt4 key购买 nike

(看起来其他人在前几周遇到过这个问题,但我没有找到任何解决方案。)

我正在尝试做一件非常基本的事情:从我的 iOS 应用程序或我的 Watch 应用程序获取数据到我的复杂 Controller 。

事实证明,我做这件事的能力比我想象的要差。 watchOS 2 过渡指南表明我应该使用以下代码“从扩展委托(delegate)中获取所需的数据”:

ExtensionDelegate* myDelegate = [[WKExtension sharedExtension] delegate];  
NSDictionary* data = [myDelegate.myComplicationData objectForKey:ComplicationCurrentEntry];

伟大的。除了,我无法弄清楚如何让它在扩展方面工作。尽管更重要的是,我似乎根本无法从复杂 Controller 启动中运行扩展委托(delegate)代码。当我运行复杂功能时,我收到以下消息:“扩展收到了唤醒复杂功能支持的请求。”但是,任何扩展委托(delegate)的方法中的代码似乎都没有运行。我还在每个方法中设置了断点,并且没有一个断点被命中。

看起来“transferCurrentComplicationUserInfo:”也被建议用于复杂功能更新,尽管目前还不清楚它是如何使用的。据我所知,它用于唤醒 watch 扩展,以便 ExtensionDelegate 可以存储新数据以供下次复杂 Controller 运行时使用,但由于上一个问题,我无法确认。

我有一个可能的解决方法(从复杂 Controller ping 服务器并希望 session 变量持续存在,以便我可以发送相关数据),但是如果我不能解决这个问题,我的复杂工作很有可能会被淹没。这里的任何帮助都是巨大的。

顺便说一句,这是我为“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);
}

最佳答案

自 Xcode 7 Beta 4 以来,我一直在 WatchOS2 中使用 Complications。我现在使用的是最新的 Xcode Beta 6。我遇到了许多问题,例如在 Watch 上运行的两个 Beta 版本,然后在 iPhone 上运行由于似乎有错误的 API 和操作系统版本,安装到 Watch 并在模拟器上运行经常会出现误报。我已经能够通过以下方式获得数据来显示并发症。

  • 确保您的主接口(interface) Controller 实现 WCSessionDelegate 协议(protocol)。
  • 在接口(interface) Controller 中实现 didReceiveMessage 和 didReceiveApplicationContext 方法。
  • 在您的 iPhone 应用程序中,尝试使用 WCSession 向 Watch 发送消息。
  • 如果消息无法从 iPhone 应用程序发送,请发送应用程序上下文。
  • 回到接口(interface) Controller ,当您收到消息或上下文时,更新您的扩展委托(delegate)中的值。
  • 仍然在接口(interface) Controller 中,在接收到消息或上下文之后,获取 CLKComplicationServer 的句柄,并为 activeComplications 中的每个复杂调用 reloadTimelineForComplication。
  • 在您的 Complication Controller 的 getCurrentTimelineEntryForComplication 中,获取您在 Extension Delegate 中设置的数据并在您的 CLKComplicationTimelineEntry 中设置值。
  • 这通常会在应用程序已经在 Watch 上打开,应用程序仍然驻留在内存中,但在 Watch 上后台运行,或者您启动应用程序并且它们正在等待它消耗的上下文时工作。
  • 我无法让历史时间线条目发挥作用(或 future 的条目)。我也无法让时间线独立于 Watch 应用程序进行更新。

  • 如果您遇到问题,可以尝试以下调试方法。正如我上面所说,API 和操作系统似乎有很多错误。以下步骤确实有效(有时)。
  • 在 sim 卡中,使用 iPhone 和 Watch sim 卡上的“重置所有设置”选项。
  • 在设备上,重新启动 Watch。如有必要,请取消配对并修复 watch ,尽管这需要很长时间。
  • 在 iPhone 上,删除应用程序(如果安装了 Watch 应用程序,也会删除)并重新安装。

  • 我希望这会有所帮助!

    贾斯汀

    关于apple-watch - 获取复杂数据 : ExtensionDelegate not Called,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32214868/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com