Tag: 苹果手表复杂

如何使用complicationController的sendMessage唤醒iOS父应用程序

我试图通过从watchkit扩展发送消息来唤醒iOS父应用程序。 这虽然只有在从watchApp / ViewController调用下面的sendMessage函数时才起作用。 从ComplicationController调用时,会发送消息,但iOS父应用程序现在会唤醒。 任何意见赞赏。 (请在Swift中的任何代码参考) 这里的简化代码: 在AppDelegate和ExtensionDelegate中: override init() { super.init() setupWatchConnectivity() } private func setupWatchConnectivity() { if WCSession.isSupported() { let session = WCSession.defaultSession() session.delegate = self session.activateSession() } } 在ExtensionDelegate :(这里没有问题,消息成功发送) func sendMessage(){ let session = WCSession.defaultSession() let applicationData:[String:AnyObject] = ["text":"test", "badgeValue": 100 ] session.sendMessage(applicationData, replyHandler: {replyMessage in print("reply received from iphone") […]

何时何地获取Watch Complication的数据

在处理了几天的复杂问题之后,我有信心对以下更新过程进行如下说明: 系统调用requestedUpdateDidBegin() 这是您可以确定您的数据是否已经改变的地方。 如果没有,你的应用程序不必做任何事情。 如果你的数据发生了变化,你需要调用: 如果所有数据都需要重置,则reloadTimelineForComplication 。 extendTimelineForComplication如果您只需要将新项目添加到并发症时间线的末尾。 注意:如果你在一天中花费了太多复杂的时间预算,系统实际上可能会调用requestedUpdateBudgetExhausted()而不是requestedUpdateDidBegin() 。 这是这个问题的原因。 如果您调用了reloadTimelineForComplication ,系统将调用getCurrentTimelineEntryForComplication (以及取决于您的时间旅行设置的将来和过去的变体) 这是猜测,因为我还没有testing过,但我相信,如果你调用extendTimelineForComplication ,只有getTimelineEntriesForComplication(… afterDate date: NSDate …)将被调用。 然后系统会调用getNextRequestedUpdateDateWithHandler这样你可以指定多长时间,直到你的并发症需要一个新的更新。 苹果的文档很清楚,你不应该要求更新太频繁,或在复杂的代码中进行太多的处理,否则你将耗尽你的时间预算,你的复杂化将停止更新。 所以,我的问题是:何时何地进行更新? 对于上下文,我的情况是一个URL,返回数据每小时更改两次。 URL提取代码最明显的位置是func requestedUpdateDidBegin()获取数据并存储,如果没有改变,就返回。 如果有变化,则延长或重新加载时间表。 但是,url提取可能代价高昂。 备择scheme: 将代码放在电话应用程序中,并通过WCSession发送,但是如果用户closures了该应用程序,那么更新将不再发生。 使用推送更新,但这不是一个Web应用程序,所以我没有地方发送它们。 显然,当用户与手表应用程序交互时,我会更新所有的数据,但是现在意味着只有在用户使用应用程序时才会更新,这不需要复杂的操作。 还有其他地方吗? 我可以在手表应用程序中有一个周期性的function,而不是复杂的一部分? 哪里是获取并发症更新数据的正确位置?