首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我无法调用WatchConnectivity的会话:didRecieveMessage:

我无法调用WatchConnectivity的会话:didRecieveMessage:
EN

Stack Overflow用户
提问于 2015-08-16 03:16:21
回答 1查看 1K关注 0票数 1

我试图让WatchConnectivity正常工作,但我无法从我的iPhone向我的Apple Watch发送(位置)消息。在AppDelegate中,我设置了会话:

代码语言:javascript
复制
var session: WCSession!    

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    // Override point for customization after application launch.
    if WCSession.isSupported() {
        session = WCSession.defaultSession()
        session.delegate = self
        session.activateSession()
    }
    return true
}

在我的ViewController中:

代码语言:javascript
复制
let manager = CLLocationManager!

override func viewDidLoad() {
    super.viewDidLoad()
    manager.desiredAccuracy = kCLLocationAccuracyBest
    manager.startUpdatingLocation()
    self.manager.delegate = self
    // CLLocationManager status handling code
}

func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { // I know this is called
    if let locationData = manager.location {
        let location = ["location" : locationData]
        (UIApplication.sharedApplication().delegate as! AppDelegate).session.sendMessage(locationData, replyHandler: nil, errorHandler: nil)
    }
}

下面是相关的接口控制器代码:

代码语言:javascript
复制
var session: WCSession!

override func willActivate() {
    // This method is called when watch view controller is about to be visible to user
    super.willActivate()
    if WCSession.isSupported() {
        session = WCSession.defaultSession()
        session.delegate = self
        session.activateSession()
    }
}


func session(session: WCSession, didReceiveMessage message: [String : AnyObject], replyHandler: ([String : AnyObject]) -> Void) { // This method is never called
    let location = message["location"] as? CLLocation
    print(location)
}

但是,我的InterfaceController没有收到消息,没有打印任何内容,我放置的断点也没有被触发。

有谁能给我指个方向吗?谢谢。

EN

回答 1

Stack Overflow用户

发布于 2015-08-16 20:29:37

传递给sendMessage的字典内容只能包含属性列表类型(如数字、字符串、数据等基本类型)。我敢打赌,如果您添加了一个错误处理程序,您会得到一个错误,指示无法发送有效负载,因为它包含无效的(非plist)类型

此外,在调用sendMessage时,如果传入的是nil replyHandler,则在接收端调用的委托方法与存在replyHandler时调用的委托方法不同。尝试实现另一个委托didReceiveMessage方法:

代码语言:javascript
复制
func session(session: WCSession, didReceiveMessage message: [String : AnyObject])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32028392

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档