私のアプリの基本的な概念は、コンプリケーションが iPhone にデータを要求し、iPhone がデータを送り返すというものです。で iPhone アプリから WCSession をアクティブにしdidFinishLaunchingWithOptions
ます。init()
また、Watch アプリで、ExtensionDelegate からを上書きしました。
これはiPhoneからの私のシングルトンです:
class WatchConnectivityManager: NSObject, WCSessionDelegate {
static let sharedManager = WatchConnectivityManager()
private override init() {
super.init()
}
private let session: WCSession? = WCSession.isSupported() ? WCSession.defaultSession() : nil
func startSession() {
print("session started")
session?.delegate = self
session?.activateSession()
}
func session(session: WCSession, didReceiveUserInfo userInfo: [String : AnyObject]) {
print("didReceiveUserInfo")
session.transferCurrentComplicationUserInfo(["reply":""])
}
}
そして、これは私の Watch からの私のシングルトンです:
class WatchConnectivityManager: NSObject, WCSessionDelegate {
static let sharedManager = WatchConnectivityManager()
private override init() {
super.init()
}
private let session: WCSession? = WCSession.isSupported() ? WCSession.defaultSession() : nil
func startSession() {
print("session started")
session?.delegate = self
session?.activateSession()
}
func session(session: WCSession, didReceiveUserInfo userInfo: [String : AnyObject]) {
print("didReceiveUserInfo")
}
func requestData() {
print("data requested")
session!.transferUserInfo(["request" : ""])
}
}
私の ExtensionDelegate の init では、Complication をアクティブ化するときに呼び出す必要がstartSession
ありますrequestData
。
class ExtensionDelegate: NSObject, WKExtensionDelegate {
override init() {
WatchConnectivityManager.sharedManager.startSession()
WatchConnectivityManager.sharedManager.requestData()
}
func applicationDidFinishLaunching() {}
func applicationDidBecomeActive() {}
func applicationWillResignActive() {}
}
そして私の iPhone からの AppDelegate:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
WatchConnectivityManager.sharedManager.startSession()
return true
}
出力は次のとおりです。
session started
data requested
didReceiveUserInfo
XCodeのシミュレーターで合併症をデバッグするときはありません。