在iOS Today Extension中使用Realm

时间:2017-01-23 20:52:34

标签: ios swift realm

我有一个今天扩展的应用程序。在MainApp的AppDelegate.swift中:

let realmContext = try! Realm(fileURL: NSFileManager
        .defaultManager()
        .containerURLForSecurityApplicationGroupIdentifier("group.this.is.test")!
        .URLByAppendingPathComponent("db.realm"))

在我今天的扩展视图中:

let realmContext = try! Realm(fileURL: NSFileManager
        .defaultManager()
        .containerURLForSecurityApplicationGroupIdentifier("group.this.is.test")!
        .URLByAppendingPathComponent("db.realm"))

那些完全相同。但是,它适用于MainApp,当我想在今天的扩展中使用它时,我在通知中心得到Unable to load。 问题是Realm,因为当我从代码中删除let realmContext = ...时,今天的扩展没有问题。 有什么问题?

1 个答案:

答案 0 :(得分:2)

这可能是因为内存耗尽。 Realm(fileURL:)在内部调用objc_copyClassList(),它需要大量内存。它偶尔会在应用扩展程序上失败,因为内存在应用扩展程序上受到严格限制(非常少)。

为避免这种情况,您可以使用objectTypes中的Realm.Configuration设置明确指定架构。当明确地给出模式时,Realm不会调用objc_copyClassList(),因为不需要枚举所有类。

let config = Realm.Configuration(
    fileURL: NSFileManager
        .defaultManager()
        .containerURLForSecurityApplicationGroupIdentifier("group.this.is.test")!
        .URLByAppendingPathComponent("db.realm"),
    objectTypes: [SomeClass.self, AnotherClass.self])
let realm = try Realm(configuration: config)
...