Watch接続を使用してiPhoneからWatchにアレイをリクエストしています。エラー:「メッセージ返信が長すぎます」 - WCSession Watch OS2
アイデアは時計からsendMessage
であり、iPhoneはdidReceiveMessage
の方法で配列に返信します。
iPhoneは応答していないようですが、ウォッチからメッセージを送信するとiPhoneがアプリケーションを開くと思っていました。私はsendMessage
しかしまだ運がないときにアプリケーションを開くことさえしようとしました。私が十分に待っていると、次のエラーメッセージが表示されます。
Error Domain=WCErrorDomain Code=7012 "Message reply took too long." UserInfo={NSLocalizedDescription=Message reply took too long., NSLocalizedFailureReason=Reply timeout occured.}
誰かが間違っている可能性がありますか?
アップルウォッチ
import WatchKit
import Foundation
import CoreData
import WatchConnectivity
class BookmarkedInterfaceController: WKInterfaceController, WCSessionDelegate {
var session : WCSession!
var objects: [AnyObject]!
@IBOutlet var table: WKInterfaceTable!
override func willActivate() {
super.willActivate()
//Check if session is supported and Activate
if (WCSession.isSupported()) {
session = WCSession.defaultSession()
session.delegate = self
session.activateSession()
}
sendMessageToIphone()
}
func sendMessageToIphone() {
if WCSession.defaultSession().reachable {
print("WCSession is reachabe")
let messageDict = ["Request": "iPhone Can You Give Me The Array"]
WCSession.defaultSession().sendMessage(messageDict, replyHandler: { (replyDict) -> Void in
print(replyDict)
}, errorHandler: { (error) -> Void in
print(error)
})
}
}
func session(session: WCSession, didReceiveMessage message: [String : AnyObject]) {
//recieving message from iphone
print("recieved message from iphone \(message)")
objects.append(message["Array"]!)
print("Objects array = \(objects)")
}
コンソール出力
WCSession is reachabe Array nil
iPhoneアプリの委任
import UIKit
import CoreData
import WatchConnectivity
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate, WCSessionDelegate {
var window: UIWindow?
var session : WCSession!
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
//Check if session is supported and Activate
if (WCSession.isSupported()) {
session = WCSession.defaultSession()
session.delegate = self
session.activateSession()
}
}
func session(session: WCSession, didReceiveMessage message: [String : AnyObject], replyHandler: ([String : AnyObject]) -> Void) {
print("did recieve message from Watch")
let applicationData = ["Array":["One", "Two", "Three"]]
replyHandler(applicationData)
}
iPhoneから何も実行されていません。私が手動でアプリを開いても。
あなたのコードは私にはうまく見えます。あなたは同じダミーデータ( '' Array ":[" One "、" Two "、" Three "]')を使っています。実際のデータを返送するために他のコードブロックが実行されている場合は、まったく別の問題がある可能性があるためです。例えば。カスタムオブジェクトの配列は、このようにウォッチアプリに戻すことはできません。 – Gandalf
@ガンダルフ私は、まずWCSession関数内で送られて印刷された文字列の配列を使って練習しようとしていました。私の目的は、テーブルに表示するウォッチにNSManagedObjectの配列を送信することでした。だから、基本的に電話機の返信ハンドラは、オブジェクトの辞書と配列をウォッチに送ります。本当に奇妙なことに私は電話機に応答することができません:/ Xcodeを新しいリリースで更新し、最高のために願う – RileyDev