同时从2个不同的目标访问Realm

时间:2016-09-09 08:42:10

标签: ios realm ios8-share-extension

比方说,我想将realm用于我的共享扩展,所以问题是,我可以在包含应用程序运行时访问共享目标中的Realm。看起来这是不可能的,但我可以从经验丰富的建议。 谢谢!

2 个答案:

答案 0 :(得分:1)

您必须将要共享的文件放在共享容器中:

RLMRealmConfiguration *configuration = [RLMRealmConfiguration defaultConfiguration];
configuration.fileURL = [[[NSFileManager defaultManager]
    containerURLForSecurityApplicationGroupIdentifier:@"group.your.group.name"]
    URLByAppendingPathComponent:@"db.realm"];
RLMRealm *realm = [RLMRealm realmWithConfiguration:configuration error:nil];

这需要为应用程序和扩展程序配置权利以拥有共享容器。

答案 1 :(得分:1)

Xcode 11-Swift 5

要使Realm可以从多个目标访问,您必须在Xcode的工作区中创建一个应用程序组
在主要目标的签名和功能标签中,请按照以下步骤操作:

点击 +功能 enter image description here

然后应用组
enter image description here

在新的“应用程序组”部分中,点击添加容器选项
enter image description here

容器的标识符应以 group开头。
确保所有需要访问领域的目标都在 App Group 部分中指定了相同的容器。

在您的 AppDelegate 中,指定以下Realm配置:

if var directory: URL = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "group.com.yourappgroup.identifier") {
        directory.appendPathComponent("db.realm", isDirectory: true)
        let config = Realm.Configuration(fileURL: directory, schemaVersion: 1)
        Realm.Configuration.defaultConfiguration = config
    }  

将“ group.com.yourappgroup.identifier”更改为您在 Signing&Capabilities 中指定的实际组标识符。
这将告诉Realm将自身放置在组容器中。

最后,应该告诉每个希望访问Realm的目标在同一组容器中进行搜索。
因此,当您希望从其他目标访问Realm时,只需添加相同的配置代码即可!