将数据从 Class 传递到 WatchOS 2(连接性)

Passing Data From A Class To WatchOS 2 (Connectivity)

我希望这里有人可能对 Watch OS 2 连接有一些想法,可以为我指明正确的方向。简而言之,我正在尝试将一组数据(来自自定义 class 称为 FileData)传递到我的 WatchKit 扩展。当我 运行 WatchKit 应用程序时,我可以看到 WCSession 正在被激活,但数据集似乎从未传递给 Watch(尽管如果我将数据更改为字符串并传递一些简单的东西,例如 "hello", 它确实工作正常);

TableViewController.swift(iOS边)

...
func sendToWatch(files: [FileData]) {
    let session = WCSession.defaultSession()
    let applicationData = ["myFiles":[FileData](files)]
    session.sendMessage(applicationData, replyHandler: { reply in
        print("Got reply: \(reply)")
    }, errorHandler: { error in
        print("error: \(error)")
    })
}
...

InterfaceController.swift(WatchKit 扩展)

...
func session(session: WCSession, didReceiveMessage message: [String : AnyObject]) {
    let files = message["myFiles"] as! [FileData]
    print("Got a message")
        dispatch_async(dispatch_get_main_queue(), { () -> Void in
            print(files)
        })

    reloadTable()
}
...

我假设我可以通过 Watch Connectivity 传递自定义 class 是不是错了?还是我哪里做错了?

谢谢!

是的,这是一个错误的假设。 WCSession sendMessage 文档指出字典可能只包含 属性 列表类型,这些类型是基本类型,例如字符串、整数、浮点数、数据等。 因此,要发送您的内容,要么将对象转换为键值对字典,要么使用不太推荐的方法,即使用 NSKeyedArchiver 将您的对象直接转换为数据。