gpt4 book ai didi

ios - WatchOS 存储和共享数据

转载 作者:行者123 更新时间:2023-11-28 18:30:23 29 4
gpt4 key购买 nike

我有一个 Core Data 应用程序。这就像一个比方说一个新闻应用程序。每个条目都有名称、ID、日期、发布者、详细信息等。主 iOS 应用程序可以有很多新闻条目。我只想展示 WatchOS 应用程序的前 3 个新闻。由于获取新闻条目需要使用键盘,因此我无法从 Watch 端启动传输。共享数据的好策略是什么?我想到了以下场景

  1. 使用 WatchConnectivity transferFile 发送核心数据文件

    • 优点:简单
    • 大量不必要的数据,如果更改尚未保存到上下文中,则可能没有最新数据。
  2. 每当添加新闻时,在保存到 CoreData 之前使用 WatchConnectivity 发送。

    • 优点:总是相同的数据,
    • 缺点:大量不必要的数据,需要额外操作才能保存到新数据库
  3. 当数据保存到 Core Data 时,查询最后三个对象并发送它们。

    • 优点:数据量小,
    • 缺点:需要先将 NSManagedObject 转换为另一个对象,可能会发送相同的数据

你能帮我找到一个更好的方法来同步 iOS 应用程序和 WatchOS 应用程序吗?谢谢。

最佳答案

我认为最好的方法是使用应用程序上下文进行后台传输。具有以下优点:

  1. 您不必关心您的 watch 应用程序是否正在运行。当您将数据添加到应用程序上下文时,它会被添加到传输队列中,并且只要 watch 应用程序处于事件状态,它就会接收数据。
  2. 每次添加三个项目时,旧项目都会被覆盖。所以队列中总是只有 3 个项目。这对于新闻应用程序来说是理想的选择,因为您不想用旧新闻打扰您的用户。所以多次发送相同的数据是没有问题的,只有最新的数据“存活”。

唯一的缺点是您必须序列化您的 NSManagedObject。我不知道你的对象有多复杂,但如果它们是你可以使用像 HyperSync 这样的库或 Groot

这就是您将手机与您的应用同步的方式:

<强>1。设置 session :

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

在两个地方执行此操作:在您的主应用程序中以及在 watch 扩展程序中。如果您只是将数据从主应用程序发送到 watch ,则无需在主应用程序端设置委托(delegate)。

<强>2。实现委托(delegate)方法:

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,将它们序列化到字典中并更新您的应用程序上下文。这样 watch 在激活时总是有最新的 3 新闻。当它已经处于事件状态时,新闻会立即更新。

还有一件事:在尝试向 watch 发送数据之前,您应该始终检查用户是否已在他的 watch 上安装该应用程序。 WCSession 有一个属性:watchAppInstalled。如果未安装该应用程序,请不要浪费资源将数据发送到深渊...

关于ios - WatchOS 存储和共享数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33063764/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com