我有一个核心数据应用。就像一个让我们说一个新闻应用程序。每个条目都有名称,ID,日期,出版商,详细信息等。主iOS应用程序可以有很多新闻条目。我只想表明让我们用WatchOS应用程序说出前3个新闻。由于获取新闻条目需要键盘使用,我无法从Watch端启动传输。分享数据的好策略是什么?我想过以下场景
使用WatchConnectivity transferFile发送核心数据文件
每当添加新闻时,请在保存到CoreData之前使用WatchConnectivity发送。
当数据保存到Core Data时,查询最后三个对象并发送它们。
你能帮我找到一个更好的方法来将iOS应用与WatchOS应用同步吗?感谢。
答案 0 :(得分:4)
我认为最好的方法是使用应用程序上下文进行后台传输。这有以下优点:
唯一的缺点是您必须序列化NSManagedObject
。我不知道您的对象有多复杂,但如果它们可以使用HyperSync或Groot
这就是您将手机与应用同步的方式:
<强> 1。设置会话:
if WCSession.isSupported() {
let session = WCSession.defaultSession()
session.delegate = self
session.activateSession()
}
在这两个地方执行此操作:在主应用程序中以及在手表扩展程序中。如果您只是将数据从主应用程序发送到手表,则无需在主应用程序端设置代理。
<强> 2。实施委托方法:
func session(session: WCSession, didReceiveApplicationContext applicationContext: [String : AnyObject]) {
// deserialize the received data,
// store it in CoreData on your watch
// and update the UI
}
第3。发送数据:
let dataDict = latestThreeNewsObjects.serializeToDictionary() // However you achieve this ;-)
do {
try WCSession.defaultSession().updateApplicationContext(dataDict as! [String : AnyObject])
} catch {
print("Cannot send data to watch: \(error)")
}
那么,每次向主应用程序CoreData添加新消息时,都会获取最新的三个NSManagedObjects
,将它们序列化为字典并更新应用程序上下文。这样,手表在活动时总会有最新的3条新闻。当它已经处于活动状态时,新闻会立即更新。
还有一件事:在尝试向手表发送数据之前,您应该始终检查用户是否在手表上安装了应用程序。 WCSession
具有以下属性:watchAppInstalled
。如果没有安装该应用程序,请不要浪费资源将数据发送到深渊......