- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在使用 WatchConnectivity
尝试将名为 arrayOfOjects
的 NSManagedObject
类型的数据发送到 Watch。每个 object
都有一个名为 title
的字符串属性。
Watch 上的 InterfaceController
加载并显示空表 - 因为数组是空的,所以当用户请求数据时,它会使用 didReceiveMessage
发送电话上的方法。
我不确定如何将字典数组添加到 objectsArray 以显示在 WKInterfaceTable
中。
有谁知道我如何将数据发送到 watch 以显示在表格中以进行更改并将它们同步回手机?
苹果 watch :
class ObjectsInterfaceController: WKInterfaceController, WCSessionDelegate {
var session : WCSession!
var objectsArray = [[AnyObject]]()
@IBOutlet var table: WKInterfaceTable!
@IBOutlet var titleLabel: WKInterfaceLabel!
func loadTableData() {
table.setNumberOfRows(self.objectsArray.count, withRowType: "CellRow")
if self.objectsArray.count > 0 {
for (index, name) in self.objectsArray.enumerate() {
let row = self.table.rowControllerAtIndex(index) as! CellRowController
row.objectCellLabel.setText(name.title)
}
}
}
override init() {
super.init()
loadTableData()
}
override func awakeWithContext(context: AnyObject?) {
super.awakeWithContext(context)
// Interface Objects
}
override func willActivate() {
// This method is called when watch view controller is about to be visible to user
super.willActivate()
//Check if session is supported and Activate
if (WCSession.isSupported()) {
session = WCSession.defaultSession()
session.delegate = self
session.activateSession()
}
}
//Swift
func session(session: WCSession, didReceiveMessage message: [String : AnyObject], replyHandler: ([String : AnyObject]) -> Void) {
let value = message["Value"]
dispatch_async(dispatch_get_main_queue()) {
self.objectsArray.removeAll()
self.objectsArray.append(value! as! Array)
self.loadTableData()
}
//send a reply
replyHandler(["Value":"Yes"])
}
}
iPhone
我已经获取了所有对象并存储在数组中。
var objectsArray = [Objects]()
func session(session: WCSession, didReceiveMessage message: [String : AnyObject], replyHandler: ([String : AnyObject]) -> Void) {
//send a reply
replyHandler(["Value": [objectsArray]])
}
我需要能够修改对象的属性并将更改保存在 iPhone 上,但 atm 我什至无法发送数据并在表中显示 :( 我已经能够在字典中发送简单的字符串值设备而不是数组或实际数据。
最佳答案
TL/DR:
您只能将基本类型(如字符串、整数、 double )发送到您的 watch 。 This question has more details about sending custom objects .
另一个问题:
即使您存档或序列化了托管对象,仍然不可能将该特定数据从手机发送到 watch 。
NSManagedObject
仅在其自身的上下文中 有效。在这种情况下,托管对象在您的 iOS 应用程序中注册到特定的 NSMangedObjectContext
。托管对象离开它的上下文是没有用的,并且它的托管对象上下文不存在于手机之外的任何其他地方。
NSManagedObject instances are not intended to be passed between queues. Doing so can result in corruption of the data and termination of the application. When it is necessary to hand off a managed object reference from one queue to another, it must be done through NSManagedObjectID instances.
由于不可能将托管对象从一个上下文(或线程或队列)传递到相同平台上的另一个上下文,因此您绝对不能在手机及其配对 watch 之间传递托管对象.
你能做什么?
如果您有办法在手机和 watch 之间共享您的 Core Data 存储,您可以将托管对象 ID 转换为字符串(使用 URIRepresentation
),然后将这些字符串传递给 watch ,然后将这些字符串转换回对象 ID 并获取相应的对象。 This is explained in detail in this question .
但是,watchOS 2 不再支持应用程序组,要让两个不同的商店在设备之间保持同步会非常复杂。
一个更简单的解决方案是传递有关标题的详细信息,跟踪您在 watch 上所做的任何更改,然后发回插入、删除或以其他方式更改的标题字典。
然后手机会更新与这些更改的标题对应的管理对象。
这类似于 NSFetchedResultsControllerDelegate
响应更改以保持其结果同步的方式。
Does anyone know how I can send the data to the watch to display in the table to make changes and sync them back with the phone?
我给了你一个大致的概述。任何更详细的内容都太宽泛了,无法包含在这个答案中。我只能建议开发人员要么使用第三方框架,要么编写自己的实现。
一些注意事项:
请记住,您不希望通过来回传输大量数据来降低用户的观看体验。保持您的 watch 应用程序轻巧且响应迅速,因为它的理想设计只能使用几秒钟。
如果您可以简化您的 watch 应用程序设计(例如,仅将待办事项列表项标记为已完成),您可以消除大部分“同步”开销,并将更复杂的任务委派给 iOS 应用程序。
关于ios - 如何与 Watch OS 2 共享数据以在使用 CoreData 时显示在 WKInterfaceTable 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35929366/
只是想知道是否有可能找出谁从 Windows 共享中读取了文件(最好使用 .NET,但 win32 native 可以)? 我想做的是创建类似 awstats 的东西对于 Windows 共享,这样我
是否可以列出 Intent.ACTION_SEND ?我的意思是我需要知道是否有人通过 action_send 在 Facebook 上分享或在 Twitter 上发推文。 最佳答案 也许你想要一个更
我正在使用 Google Apps 应用程序。实际上,我想在不使用密码的情况下访问另一个 ID。我使用了 OAuth,它运行良好。但我无法分享特定人的日历。我尝试了以下代码。 GoogleOAuthP
我怎样才能只创建模拟器...可能吗?我知道,设备需要分发证书。 最佳答案 您只需将应用程序目录从 iPhone 模拟器复制到另一个实例/操作系统版本,它就应该可以工作。 因此,如果您想分发 3.1.3
我想使用多阶段构建来避免每次构建应用程序时都下载我的 Java 项目所需的所有 Maven 依赖项。 我正在考虑在第一阶段解决 Maven 依赖项,然后在第二阶段构建应用程序,这将需要访问在前一阶段下
我正在寻找保护用户下载内容的初步想法。用户下载充满有趣资源的 zip 文件,这些资源被提取到本地文件系统中以供应用程序使用。我的目标是防止用户通过互联网将下载的资源共享给其他用户(假设他们获得了对文件
我想知道在具有移动和桌面版本的网站上共享身份验证、 session 管理等的最佳方法是什么。我们正在运行 Tomcat,并且更愿意将移动站点和桌面站点的应用程序保持在不同的节点上。 我看过类似的帖子,
我发现了这个单例的实现。我怎样才能创建指向它的指针或共享指针?` 为什么这不起作用?自动测试 = Singleton::Instance(); class Singleton { public: st
我有一个 heroku 项目,我想与其他人分享。作为the instructions describe ,我使用 virtualenv 来管理环境和依赖项。有没有办法在新机器上从 requiremen
Maven 将所有 jar 存储在本地存储库 ~/.m2/repository/ 下。用户多时占用空间大。 那么,是否可以由多个用户共享这个本地存储库,或许在不同的目录结构下? 最佳答案 简单的回答
为什么共享 worker 在重新加载页面时死了?应该是复活了我该如何解决这个问题? 重装前 重新加载后(在example.com上按F5) parent worker var port = new S
我正在开发多个小型应用程序,这些应用程序将共享通用和共享模块和 Assets 。 关于如何创建项目结构的部分在这里回答:https://stackoverflow.com/a/61254557/135
我在 RHEL 上安装了 jenkins (localhost:8080),我能够成功地构建代码 现在,我想设置主/从代理。 我的笔记本电脑将充当“Master Jenkins”,而我同事的笔记本电脑
我有这种方法可以根据我使用的 EXTRA_STREAM 共享文本文件或图片。我有这两个我可以选择 i.putExtra(Intent.EXTRA_STREAM, uri); i.putExtra(In
我正在使用 R 中的一个数据分析项目,我正在使用 R 中的敏感私有(private)数据进行一些逻辑和多级建模。我爱上了 。预订 包,我已经创建了一本关于我们的工作流程和分析管道的相当广泛的书。问题是
我正在构建的应用程序需要在 UITabBarController 框架内为多个 View (及其 subview )显示共享的自定义 UIToolbar。自定义工具栏的内容在所有 View 中都是相同
我有多个应用程序,我想共享相同的 eslint 配置: - project_root/ - app1/ - node_modules/ - eslint.rc
我有多个 Electron 应用程序。一个是主应用程序,其他几个功能应用程序。主应用程序上的按钮很少,这将导致功能应用程序打开。这里的问题是每个应用程序都有一个主进程,该进程导致要利用更多的CPU。是
我正在开发一个 Node.js 后端,它通过 websocket 与一些桌面客户端进行通信,而服务器端的通信是从 Web 前端发起的。一切正常,因为我将 SockJS Connection 实例存储在
我对托管多个网站的服务器上的多个用户帐户使用私有(private) SSH key 和无密码条目。 我为每个用户帐户使用相同的私钥。 (因为我很懒?或者那是“正确”的方式)。 我现在想授权该国不同地区
我是一名优秀的程序员,十分优秀!