【问题标题】:Realm database for iOS app with Watch Extension带有 Watch Extension 的 iOS 应用的 Realm 数据库
【发布时间】:2017-04-02 17:17:43
【问题描述】:

帮助了解与 Realm 相关的问题。有一个适用于 iOS 和 Watch Extension 的应用程序。我能够连接到它们中的每一个 Realm 基础,但是当您向其中添加信息时 - 例如,在 iOS 应用程序中,它不会出现在 Watch 上。如何同步显示?

我在这两种情况下都使用这个函数:

func setDefaultRealmPath()
{
let directory: URL =  FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "group.com.gurman.watchTestApp")!

let fileRealmURL = directory.appendingPathComponent("db.realm")
realm = try! Realm(fileURL: fileRealmURL)

var config = Realm.Configuration.defaultConfiguration
config.fileURL = fileRealmURL

Realm.Configuration.defaultConfiguration = config

print("file url: \(realm.configuration.fileURL!)")
}

请帮忙!

【问题讨论】:

  • 有什么解决办法吗??
  • 你有两个完全独立的数据库——一个在 iPhone 上,一个在手表上。它们不打算同步。
  • 原来我需要使用 WatchConnectivity 框架来复制我在每个 Realm 数据库中的操作?
  • 肯定的。另一种选择可能是通过 CloudKit 和 iCloud 执行这​​些操作,甚至可能将 db 文件存储在那里(值得检查是否可能)developer.apple.com/library/content/documentation/General/…
  • 非常感谢您的建议!我只需要知道在这种情况下使用 WatchConnectivity 框架是正确的解决方案

标签: swift3 realm watchkit


【解决方案1】:

在 watchOS 1 中,手表应用是父应用的共享扩展,可以访问共享文件,但在 watchOS 2 中,情况不再如此。

watchOS 2 上的应用完全独立于它们的父 iOS 应用(我相信它们可以在父应用关闭时运行)。因此,您有必要将 iOS 应用中所做的更改传达给手表。

您可以在 WatchConnectivity 框架中使用WCSession 在两个平台之间发送数据。如果您有一个包含初始数据集的预捆绑 Realm 文件,您应该能够在应用程序初始启动时发送整个文件。在那之后,您应该只将更改的键值数据发送到手表,以便它保持最新状态。

【讨论】:

  • 感谢扩展答案!还有一个问题 - 是否可以通过像 Result 这样的消息对象进行传输?
  • 不客气!我认为不可能通过WCSession 直接发送Results 对象。 WCSession.sendMessage(message: , replyHandler: , errorHandler:) 似乎暗示它只能发送字典对象。
  • 还有数组可以转移吗?
  • 我不能肯定;我从未尝试过,但我假设它是符合NSCoding 的任何对象类型。 :)
猜你喜欢
  • 2020-09-08
  • 2021-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多