如何将服务器数据传递/解析到WatchKit表行中的对象?

时间:2016-01-23 21:09:29

标签: json swift rest http watchkit

我的教程是WhatsApp / SnapChat应用程序。自然地,头像图像,国家标志,用户名,性别符号和对话数据都来自服务器和主机应用程序。

这些类型的应用程序不使用Parse之类的API或其他第三方依赖项,因为它们将REST / JSON与自己的服务器一起使用。

如何将相同的数据和UI元素放到监视表行?我们是否必须在手表扩展中重写相同的HTTP GET方法,以及将UI元素重新复制到watchOS磁带文件夹中?我们不能只调用iOS主机应用程序中已存在的相同方法吗?我不确定如何使用连接框架。

您能否举一个GET和POST方法的例子来为观察表行视图对象分配头像或用户名?例如,对于Node.js服务器。

enter image description here

2 个答案:

答案 0 :(得分:2)

由于您的iOS主机应用已经下载并反序列化了数据,因此手表复制该代码或工作并获取相同的数据并没有任何意义。

至于提供示例,应该在代码中显示您尝试的内容,并解释您遇到的具体问题。

文档

您应该使用Watch Connectivity framework在iOS和watchOS应用之间共享数据。

您会在watchOS 2 Transition Guide找到一个好的介绍。有关详细信息,请参阅与您的Companion iOS应用程序通信

Apple还提供了Lister sample code,演示了如何使用WCSession在iOS和watchOS之间传输应用程序上下文和文件。

  

由于主机应用程序是用Obj-C编写的,因此应将WatchConnectivity / WCSessionDelegate导入到包含需要发送到监视扩展的数据的每个文件头文件中吗?

WCSession是您在发布时配置的单身人士,在您的iOS应用和观看分机的生命周期的早期。有关详细信息,请参阅转换指南的激活会话对象

如果您不了解应用应如何或在何处处理手表连接,那么您可以通过Google轻松找到大量的教程和示例项目。

  

所以基于你所说的我只需要使用连接框架。 sendMessageToWatchdidReceiveMessage方法。

您使用的确切方法取决于您要传输的内容 - 应用程序上下文,用户信息,文件或消息 - 以及它是在前台还是后台进行。有关详细信息,请参阅转换指南的选择正确的通讯选项

答案 1 :(得分:0)

如果您查看GitHub上已有的一些聊天应用项目,您将看到如何精确使用连接框架。 Obj-C和Swift。

这是一个专门向您展示如何来回传递消息的方法。 https://github.com/carbamide/MessagingTest

这不是我的代码。正如您所看到的,代码几乎相同。

ViewController.swift

override func awakeWithContext(context: AnyObject?) {
    super.awakeWithContext(context)

    if (WCSession.isSupported()) {
        let session = WCSession.defaultSession()
        session.delegate = self
        session.activateSession()
    }
}


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

    let okButton = UIAlertAction(title: "OK", style: .Default, handler: nil)
    let alert = UIAlertController(title: "Application Context Received", message: applicationContext.description, preferredStyle: .Alert)
    alert.addAction(okButton)

    self.presentViewController(alert, animated: true, completion: nil)
}

watchOS InterfaceController.swift

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

    let okButton = WKAlertAction(title: "OK", style: WKAlertActionStyle.Default, handler: { () -> Void in })

    self.presentAlertControllerWithTitle("Application Context Received", message: applicationContext.description, preferredStyle: .Alert, actions: [okButton])
}