【发布时间】:2016-02-02 18:15:24
【问题描述】:
所以我使用 Watch Connectivity 从 iPhone 向 Watch 请求一个数组。
这个想法是从手表到sendMessage,iPhone 将在didReceiveMessage 方法中回复数组。
但是 iPhone 似乎没有响应,我认为当我从 Watch 发送消息时 iPhone 会打开应用程序。当我sendMessage 时,我什至尝试打开应用程序,但仍然没有运气。当我等待足够长的时间时,我会收到以下错误消息:
Error Domain=WCErrorDomain Code=7012 "消息回复时间过长。" UserInfo={NSLocalizedDescription=消息回复时间过长。, NSLocalizedFailureReason=回复超时。}
有人知道我哪里出错了吗?
苹果手表
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 可达 数组无
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"]]),对吗?因为如果您运行其他一些代码块来发回实际数据,那么可能会完全存在其他一些问题。例如。无法像这样将自定义对象数组传回给 Watch App。 -
@Gandalf 我将首先练习在 WCSession 函数中发送和打印的字符串数组。我的目标是将一组 NSManagedObject 发送到 Watch 以显示在表中。所以基本上电话上的回复处理程序会将字典和对象数组发送到手表。真的很奇怪我怎么无法让手机响应:/ 可能会用新版本更新 Xcode 并希望最好
标签: ios swift watchconnectivity wcsession