2017-04-02 63 views
0

有助于理解与Realm相关的问题。 iOS和Watch Extension有一个应用程序。我能够连接到它们中的每一个Realm base,但是当您将信息添加到其中时 - 例如,在iOS应用程序中,它不会出现在Watch上。我如何同步显示?带手表扩展功能的iOS应用领域数据库

我在这两种情况下使用此功能:

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!)") 
} 

请帮助!

+0

任何解决方案? –

+0

你有两个完全分离的数据库 - 一个在iphone上,一个在手表上。他们不打算同步。 – abjurato

+0

事实证明,我需要使用WatchConnectivity框架才能在每个Realm数据库中复制我的操作? –

回答

1

在watchOS 1中,watch应用程序是共享文件的共享扩展,可以访问共享文件,截至watchOS 2,情况已不再是这样。

watchOS 2上的应用程序与其父级iOS应用程序完全分离(至相信在父应用程序关闭时它们可以运行的点)。因此,您需要将iOS应用程序中所做的更改传达给手表。

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

+0

感谢您的扩展答案! 还有一个问题 - 是否可以通过消息对象如结果进行传输? –

+0

不客气!我不认为有可能通过'WCSession'直接发送'Results'对象。 'WCSession.sendMessage(message:,replyHandler:,errorHandler:)似乎暗示它只能发送字典对象。 – TiM

+0

而阵列可以转移? –