我有一个今天扩展的应用程序。在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 = ...
时,今天的扩展没有问题。
有什么问题?
答案 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)
...