使用 Swift 3 和 Realm 同步 Apple Watch 和 iPhone

2024-05-13

我需要从 Apple Watch 和 iPhone 显示和修改我的数据结构。

数据库:

我目前正在使用一个简单的领域结构,其中有一个对象 A 和一个可以容纳大量 A 的对象 B。

因此,在 iPhone 上,用户可以创建 B 并添加 A,当然还可以查看所有 A 和 B。

我希望 Apple Watch 显示当前 B 的所有 A,并让用户有机会在当前 B 中添加新的 A。

我尝试这样做的方式:

我想将 Hole Realm 文件从 iPhone 移动到手表或其他方式。 (这是网上的一个tips)

iPhone 代码:

    override func viewDidLoad() {
    super.viewDidLoad()


    if WCSession.isSupported() { //makes sure it's not an iPad or iPod
        let watchSession = WCSession.default()
        watchSession.delegate = self
        watchSession.activate()

        transferRealmFile()

        if  watchSession.isWatchAppInstalled {
            do {
                try watchSession.updateApplicationContext(["foo": "bar"])
            } catch let error as NSError {
                print(error.description)
            }
        }
    }
}
func transferRealmFile(){
    if let path = Realm.Configuration().fileURL {
        WCSession.default().transferFile(path, metadata: nil)
    }
}

WatchKit 扩展:

  func session(_ session: WCSession, didReceive file: WCSessionFile) {

    //set the recieved file to default Realm file
    var config = Realm.Configuration()
    let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
    let documentsDirectory = paths[0]
    let realmURL = documentsDirectory.appendingPathComponent("data.realm")
    if FileManager.default.fileExists(atPath: realmURL.path){
        try! FileManager.default.removeItem(at: realmURL)
    }
    try! FileManager.default.copyItem(at: file.fileURL, to: realmURL)
    config.fileURL = realmURL
    Realm.Configuration.defaultConfiguration = config
}

然后我每次写入 Realm 时都会调用transferRealmFile()。这有效,但我无法解决这个问题:

问题:

  1. 如果只启动watchKit App,则不起作用。
  2. Apple Watch 与 iPhone 的工作方式不同。 (我想我需要更改 didRecived 代码,但我不知道是什么)

问题:

您知道谁来解决这两个问题,或者您是否知道更好的方法来处理这种情况,或者我们 iPhone 和 Watch 之间的交互方式会在 WatchOS 3 中发生变化吗?


通过 watchOS1 可以使用AppGroups在 iOS 应用程序及其 Watch 扩展之间共享资源(甚至是您的 Realm 数据库)。然而,Apple 在 watchOS 2 中删除了这一点,因此现在在 iOS 和 watchOS 应用程序之间共享数据的唯一方法是通过WatchConnectivity。看一下this https://stackoverflow.com/questions/39644579/share-realm-data-with-watchos?rq=1 answer.

遗憾的是,WatchConnectivity 框架要求 WCSession 在两个设备上都处于活动状态才能传输数据,因此您无法真正解决问题 1。

在我看来,仅传达两个应用程序之间的更改而不发送整个 Realm 文件是一个更好的解决方案,因为您的 Realm 文件可能会变得相当大,因此向前和向后发送它可能会花费大量时间和资源,而仅仅发送更改应该会更快。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Swift 3 和 Realm 同步 Apple Watch 和 iPhone 的相关文章

随机推荐

  • 为什么这些向量不相等?

    我创建了两个向量 并用push back填充另一个向量 用索引填充另一个向量 我希望这些是相等的 但事实并非如此 有人可以解释一下这是为什么吗 include
  • jhipster-gateway API 部分中未列出 API-first Rest 端点 (swagger-ui)

    使用jhipster 5 7 2 我创建了一个 api 网关和两个微服务 在第一个中 我创建了一个实体 它在网关后面完美运行 网关显示生成的实体的 api 端点 我生成了第二个微服务 但这次我已经在 yml 文件中定义了一个 api 因此我
  • 三-mtl-loader 错误:THREE.MeshPhongMaterial:.shading 已被删除 -> 对象不可见

    昨天我问了这个问题 未捕获的类型错误 THREE MTLLoader 不是构造函数 2 0 https stackoverflow com questions 47741644 uncaught typeerror three mtlloa
  • Chrome 75 正则表达式,“S”匹配奇怪的 unicode 范围

    我们在最新版本的 Chrome 75 上有一个奇怪的错误 它取代了S to 83 console log AZERTYUIOPQSDFGHJKLMWXCVBN replace u00A0 u9999 lt gt gim char gt ch
  • 如何修复 SSIS“文件/进程不在路径中”警告?

    SSIS 附带了许多解决数据获取和集成问题的任务 但它缺少的一项任务是用于通过 HTTP 下载文件的 HTTP 任务 为了解决这个问题 我安装了Wget http gnuwin32 sourceforge net packages wget
  • 读取FCS文件

    我正在研究流式细胞术 我想使用 python 解析 fcs 文件 我在互联网上研究过 有一个模块fcm但这是针对Linux操作系统的 我正在Windows上工作 我想知道如何使用 python 解析 Windows 中的 fcs 文件 如果
  • Rails 3.1 和 Asset Pipeline:使用 Capistrano 进行部署时遇到的问题

    我刚刚从 Ruby on Rails 3 0 10 切换到 3 1 0 我想使用 Capistrano gem 部署我的资产文件 我的本地计算机是运行 Snow Leopard 的 MacO 我的远程计算机运行的是 Ubuntu 10 04
  • 在 flutter 中将 JSON 解析为 Map

    我收到后端的响应 measurements pm10 name pm10 value 20 8647 unit g m pm25 name pm10 value 20 8647 unit g m o2 name pm10 v
  • 如何让 UITableview 在重新加载时转到页面顶部?

    当我调用以下命令时重新加载表数据时 我试图让 UITableview 转到页面顶部 void pickerView UIPickerView pickerView didSelectRow NSInteger row inComponent
  • Scala 2.9 无法在 Windows XP 上运行“hello world”示例

    我正在尝试在 Windows XP 上使用 scala 2 9 1 Final 运行 HelloWorld 示例 object HelloWorld extends App println Hello World 文件另存为Hello sc
  • 您将如何创建“手动”django 迁移?

    我发现我可以使用 django 项目中的 postgres 数据库设置列的默认值migrations RunSQL some sql 我目前正在通过添加列 makemigrations 然后删除列 makemigrations 然后手动修改
  • jQuery hide() 动画向右滑动

    使用 jQuery 的hide 使用可选的持续时间参数的函数 我可以在我的网站上获得一些警报框 以优雅地滑出屏幕并消失 隐藏动画的默认方向似乎是向左滑动 尽管此行为未在hide 定义页 http api jquery com hide 我需
  • 我应该在我的 iOS Objective-C 项目中使用它吗?

    Xcode 中的 构建设置 中的 Mach O 类型是什么 应该设置什么 它有这些选项 可执行文件 动态库 捆绑包 静态库 可重定位对象文件 自从我将其从可执行文件更改为静态库以来 我遇到了错误 Apple Mach O 链接器错误组 我的
  • Google Tag Assistant 询问 Feed ID

    我被要求使用旧的再营销跟踪代码升级现有网站 如下所示
  • 用于选择矩形内文本的编辑器

    我经常发现自己在处理某些文本时想要排除文本的特定部分 例如 40 行的前三个字符 我能想到的最快方法是绘制一个矩形并复制文本 我主要使用 Windows 但我确信 grep 或类似的东西可以用少量代码来完成此操作 我最好的方法是打开命令提示
  • ggplot2 中的小时刻度

    我正在处理就寝时间和醒来时间 因此我想创建一个具有 24 小时 x 轴的图表 从第一天中午 12 点开始 到第二天中午 12 点结束 这意味着晚上 11 59 之后 它应该再次从 0 开始 同样的问题 仅涉及数字 我想创建一个从 10 到
  • Windows Phone 后台任务过早停止

    我正在开发一个 WP8 1 SL 应用程序 它使用后台任务 不是代理 我的任务由 TimerTrigger 触发 每 30 分钟一次 我相信这是 Windows Phone 的最小间隔 对吧 它正在做很多工作 并且由于某种原因 有时它会被中
  • GoQt 致命错误:QAbstractAnimation:没有这样的文件或目录

    我尝试编译 Qt 来开发桌面应用程序 我按照 Qt 网站上的官方 wiki 指南的说明进行操作 当我尝试go run示例文件夹中的示例 我收到错误 去运行 home pinkya rabbit workspace go1programs s
  • 在python中组合2个列表

    我有 2 个列表 每个列表大小相同 并且有兴趣将这两个列表组合起来并将其写入文件中 alist 1 2 3 5 blist 2 3 4 5 结果列表应该是这样的 1 2 2 3 3 4 5 5 之后我希望将其写入文件 我怎样才能做到这一点
  • 使用 Swift 3 和 Realm 同步 Apple Watch 和 iPhone

    我需要从 Apple Watch 和 iPhone 显示和修改我的数据结构 数据库 我目前正在使用一个简单的领域结构 其中有一个对象 A 和一个可以容纳大量 A 的对象 B 因此 在 iPhone 上 用户可以创建 B 并添加 A 当然还可