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

Ios 将数据从类传递到WatchOS 2(连接性),ios,connectivity,watchos-2,Ios,Connectivity,Watchos 2,我希望这里的人能对Watch OS 2的连接有一些想法,为我指明正确的方向。简而言之,我正在尝试将一组数据(来自名为FileData的自定义类)传递给我的WatchKit扩展。当我运行WatchKit应用程序时,我可以看到WCSession正在被激活,但数据集似乎从未被传递到手表(尽管如果我将数据更改为字符串并传递类似“hello”这样的简单信息,它确实可以正常工作) TableViewController.swift(iOS端) InterfaceController.swift(WatchK

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

TableViewController.swift(iOS端)

InterfaceController.swift(WatchKit扩展)

假设我可以通过手表连接传递自定义类,这是错误的吗?还是我做错了什么


谢谢大家!

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

这是有道理的。谢谢你的澄清!酷!sendMessage错误处理程序也会返回一个错误,指示有效负载包含无效类型奇怪的是,我实际上能够发送数据(使用
let msg=[“myFiles”:String(self.files)]
),尽管我感觉我只是在强制我的“files”dictionary不再是自定义类,而是字符串。它实际上是发送给WatchKit的,尽管我在使用WatchKit上的数据时遇到了问题,这是一个完全不同的问题。再次感谢!我可以想象,当你从“文件”字典创建一个字符串时,它正在调用其上的description方法,这只会为你提供字典的简化字符串版本(类似于你登录字典时得到的结果)
...
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)")
    })
}
...
...
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()
}
...