12

私の iOS アプリケーションでは、 Core Data を使用してデータを保存し、フェッチ要求を使用して の配列を作成し、NSManagedObjectに表示しますUITableView

Watch OS でWCSession、セッションがサポートされていてアクティブかどうかを確認し、watchOS 拡張機能から iOS アプリケーションにメッセージを送信します。

iOS アプリケーションが watchOS からメッセージを受信すると、 の配列をObjectswatchOS 拡張機能に送信して にデータを表示する必要がありますが、WKInterfaceTableこれを行う方法がわかりません。最終的に私が達成しようとしているのは;

  • の配列をObjectswatchOS拡張機能と共有するにはどうすればよいですか?

  • ユーザーがウォッチの配列にオブジェクトを追加/編集/削除した場合、iPhone のデータを更新するにはどうすればよいですか?

  • また、iOS アプリケーションは に埋め込まれているUITabBarControllerため、どのビュー コントローラと通信するかは重要ですか?

OS のお気に入りを監視するInterfaceController

var session : WCSession!

override func willActivate() {
    // This method is called when watch view controller is about to be visible to user
    super.willActivate()

    //Check if session is supported and Activate
    if (WCSession.isSupported()) {
        session = WCSession.defaultSession()
        session.delegate = self
        session.activateSession()
    }
}

override func awakeWithContext(context: AnyObject?) {
    super.awakeWithContext(context)
    // Interface Objects

    //Send Message
    sendmessagetoiphone()   
}

func sendMessageToIphone() {
    if(WCSession.isSupported()){
        session.sendMessage(["b":"goodBye"], replyHandler: nil, errorHandler: nil)
    }
}

IOS アプリケーション: FavoritesViewController

var objects = [Objects]()

func loadData() { 

    let moc = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext
    let request = NSFetchRequest(entityName: "Objects")
    request.sortDescriptors = [NSSortDescriptor(key: "date", ascending: true)]
    do {
        try
            self.objects = moc.executeFetchRequest(request) as! [Objects]
        // success ...
    } catch {
        // failure
        print("Fetch failed")
    }
 }

   func session(session: WCSession, didReceiveMessage message: [String : AnyObject], replyHandler: ([String : AnyObject]) -> Void) {
    //handle received message   
    let value = message["Value"] as? String
    dispatch_async(dispatch_get_main_queue()) {
        self.messageLabel.text = value
    }
    //send a reply
    replyHandler(["Value":"Hello Watch"])
   }
4

3 に答える 3

7
  • オブジェクトの配列を Watch OS Extension と共有する方法は? フレームワークを使用しているため、メソッドWatchConnectivityを使用して iPhone からオブジェクトの配列を送信し、メソッドsendMessageFavoritesInterfaceController 実装しfunc session(session: WCSession, didReceiveMessage て応答を取得するか、replyhandlerで配列を取得できます。

  • ユーザーが Watch OS の配列にオブジェクトを追加/編集/削除した場合、どうすれば iPhone のデータを更新できますか?

    メソッドの新しい変更とともに objectIdsendMessageを時計から電話に送信します。電話で受信すると、データベースに変更が加えられ、変更が保存され、replyHandlerで更新された値が送信されるため、時計のコンテンツがそれに応じて更新されます。

  • また、iOS アプリケーションは UITabBarController 内に埋め込まれているため、どのビュー コントローラーと通信するかは重要ですか?

    通信しているviewControllerが必要な場合、または変更を行う責任があるviewControllerが生きている必要があります。複数のViewControllerがリッスンしている場合WCSessionDelegates、時計からメッセージを送信すると、すべてのライブコントローラーがそのメッセージを受信します。実行する操作を知ることができるようidentifierに、辞書に何らかの種類を含める必要があります。オブジェクトsendMessageが必要な場合と同様に、メッセージを送信するときに含まれ ているため、受信時に値を確認して操作を実行できます。deletewatchidentifierdeleteidentifierdelete

于 2015-12-22T06:52:03.537 に答える
3

これを行うには、sendMessageでreplyHandlerを使用できます。これを取得するには、Watch と iOS アプリの両方に必ず応答ハンドラーを実装してください。

基本的に、適切に処理すれば、応答ハンドラーは、時計アプリのメッセージに応答して iOS アプリが何をするかを確認できます。

また、(オブジェクトの配列を送信する)応答について言えば、それを辞書として送信し、時計でフェッチする必要があります。

于 2015-12-21T15:23:03.987 に答える
3

まず、これは本当に良い質問です。手始めに、WWDC 2015 の次のセッションを視聴することをお勧めします: セッション 713 - ウォッチ コネクティビティの紹介。これはここで見つけることができます。

今あなたの実際の質問に。アプリ グループを使用して Apple Watch アプリとコンテナー アプリの間で Core Data を通信する方法を示す優れたチュートリアルとGithub リポジトリがあります。これにより、Core Data や NSUSerdefaults などのすべての共有コンテンツにアクセスできるようになります。

次に、次のリンクの下で、これを行う方法に関する完全なチュートリアルを見つけることができます。

お役に立てば幸いです、ジュリアン。

于 2015-12-22T05:34:22.843 に答える