0

对于watchOS 2and Xcode 7.3,我正在尝试将我在 iPhone 端的图像发送到手表端。在电话方面,我有这个:

func sendImage() {
    if WCSession.isSupported() {
        let session = WCSession.defaultSession()
        if session.watchAppInstalled {
            do {
                let image = UIImage(named: "myPic")
                let imgData = NSKeyedArchiver.archivedDataWithRootObject(image!)
                let dictionary = ["img": imgData]
                try session.updateApplicationContext(dictionary)
            } catch {
                print("ERROR: \(error)")
            }
        }
    }
}

然后,在WatchKit Extension边(ExtensionDelegate文件)中,我有:

func session(session: WCSession, didReceiveApplicationContext applicationContext: [String : AnyObject]) {

    let initialController = WKExtension.sharedExtension().rootInterfaceController as! InterfaceController
    initialController.showImage(applicationContext["img"] as! NSData)
}

并在InterfaceController

func showImage(imageData: NSData) {
    let image = UIImage(data: imageData, scale: 1.0)
    self.myImage.setImage(image!)
}

哪里myImageWKInterfaceImage插座。当showImage方法被调用时,imageData不是nil,而是imageself.myImage.setImage(image!)被调用时。我究竟做错了什么?

4

2 回答 2

0

我不熟悉,NSKeyedArchiver但这就是我的建议。

您正在将图像存档在手机上,然后只是尝试使用 Watch 端的数据。如果有意义的话,我认为您将需要某种类型的取消归档。我发现存在一个NSKeyedUnarchiver具有unarchiveObjectWithData功能的。试试这个而不是使用存档的数据,所以你将首先取消存档数据,然后构造一个 UIImage。

您也可以改用UIImagePNGRepresentation在手机端获取 UIImage 并发送 NSData 的函数。然后你跳过存档的额外步骤,我不确定你是否需要。然后,您只需使用发送的 NSData 构造 UIImage。

如果这不起作用,请添加您发送的数据和手表上接收的数据的打印并比较它们。

于 2016-04-29T16:57:09.790 回答
0

它认为您使用的方法不是Apple推荐的方法(尽管可以使用部分必要的预防措施),Apple建议使用以下方法进行文件交换(您可以将图像保存到临时文件并发送到手表)

func transferFile(_ file: NSURL, metadata metadata: [String : AnyObject]?) -> WCSessionFileTransfer

当然你必须记住,Apple Watch 和 iPhone 之间的数据交换作为一个维度是有限的。

于 2016-05-07T10:52:27.633 回答