2

私のアプリの基本的な概念は、コンプリケーションが 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

didReceiveUserInfoXCodeのシミュレーターで合併症をデバッグするときはありません。

4

0 に答える 0