2017-12-27 17 views
1

私は自分のiOSアプリケーションからApplicationsContextの形でint notificationCountを私のWatchOSに送ることに取り組んでいます。applicationContextを受け取り、再転送しないようにする適切な方法はありますか? - WatchConnectivity

func session(_ session: WCSession, didReceiveApplicationContext applicationContext: [String : Any]) {}

問題がnotificationCountが変更されるたびにのみ上記のコードは、反応しています。これは、notificationCountが必要なInterfaceControllerを開いたときに、値がiOSのカウンタから更新される前に何も数値がないことを意味します。

送信値が同じでない場合にのみdidReceiveApplicationContextと思われます。しかし、いくつかの再転送を避けるために、最近の転送と同じ値を持つためにnotificationCountの値をチェックする適切な方法がありますか?

答えて

0

あなたのExtension Delegateのプロパティ(またはデータの格納に使用する可能性のある他のインスタンス)にnotificationCountを保存して、コントローラのawakeメソッドで使用します(必要に応じて/またはwillActivate)。さらに、あなたのアプリケーションを再起動しても生き残るために、UserDefaultsまたはファイルに保存することをお勧めします。

このような何か:

class ExtensionDelegate: NSObject, WKExtensionDelegate, WCSessionDelegate { 
    var notificationCount: Int? 

    // ... 

    func applicationDidFinishLaunching() { 
     // do your normal init stuff 
     // read notificationCount from UserDefaults 
    } 

    // ... 

    func session(_ session: WCSession, didReceiveApplicationContext applicationContext: [String : Any]) { 
     if let count = applicationContext["NotificationCount"] { 
      notificationCount = count 
      // save to UserDefaults here 
     } 
    } 
} 
関連する問題