【发布时间】:2015-11-06 17:18:54
【问题描述】:
我在使用 WatchOS 时遇到了一个奇怪的问题(但我认为这个问题与 iOS 和 OSX 类似)。
我正在使用单例来处理 WCSession 委托(完整代码由 NatashaTheRobot 提供,我在这里仅粘贴她的一部分代码,完整代码为 here )。
此类有一个 startSession 函数,其中单例关联为会话的委托:
func startSession() {
session?.delegate = self
session?.activateSession()
}
所有的委托函数都定义在同一个类中,比如session:didReceiveMessage:replyHandler:
我希望能够在 Watch 应用程序每次接收到当前 InterfaceController 独立的消息时调用委托。
我认为实现这个目标的好地方可能是ExtensionDelegate 类:
class ExtensionDelegate: NSObject, WKExtensionDelegate {
let session = WatchSessionManager.sharedManager // THE SINGLETON INSTANCE
func applicationDidFinishLaunching() {
session.startSession()
}
似乎这段代码不起作用,并且从未调用过委托函数。
然后我决定采用一种不太通用的方式,并开始在所有 InterfaceController 中添加对单例实例的引用......但它再次不起作用,并且从未调用过委托方法。 然后,在我的最后一次尝试中,我直接在 InterfaceController 代码中实现了会话委托协议。在那种情况下,我会收到来自 iOS 应用程序的消息……它工作正常(显然只有当手表应用程序呈现特定的 InterfaceController 时)。
我的问题是:为什么实现一个通用的单例对象不起作用?为什么我必须直接在 InterfaceController 上实现委托才能使其工作?
【问题讨论】:
标签: watchkit watchos-2 watchconnectivity