领域异常错误Domain = io.realm Code = 2“不允许操作”

时间:2016-06-29 18:44:39

标签: ios swift2 realm

我正在为Realm使用新的defaultConfiguration(我想是这样......)

那么我该尝试什么?我想将默认的Realm URL更改为基于Apple App组的ID,因为我想从我的应用程序的Today Extension和我的应用程序本身使用相同的Realm。

我找到了一个(slightly outdated Realm tutorial for WatchKit Extension),你把以下内容放到了AppDelegate

realmUrl: NSURL = NSFileManager.defaultManager().containerURLForSecurityApplicationGroupIdentifier("group.net.exchange.On")!
realmUrl.URLByAppendingPathComponent("db.realm")

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

这很有效。但我从Realm读取的编码,在此之前正在工作,现在崩溃了这个例子:

这正在改变这个变化:`让领域=尝试!境界()``

但是现在它创造了这个美丽的错误; - )

fatal error: 'try!' expression unexpectedly raised an error: Error Domain=io.realm 
Code=2 "Operation not permitted" UserInfo={Error Code=2, 
NSFilePath=/private/var/mobile/Containers/Shared/AppGroup/4E8402AD-89E4-4138-8B83-CA6B409BB238, 
Underlying=n/a, NSLocalizedDescription=Operation not permitted}: 
file /Library/Caches/com.apple.xbs/Sources/swiftlang/swiftlang-703.0.18.8/src/swift/stdlib/public/core/ErrorType.swift, line 54

我有点失落。希望任何人都可以帮助我。 TIA John

1 个答案:

答案 0 :(得分:2)

问题是,您在Realm配置中设置的路径fileURL是应用程序组容器的路径,而不是其中文件的路径。这是由于以下代码:

let realmUrl: NSURL = NSFileManager.defaultManager().containerURLForSecurityApplicationGroupIdentifier("group.net.exchange.On")!
realmUrl.URLByAppendingPathComponent("db.realm")

NSURL.URLByAppendingPathComponent(_:)返回一个新网址,而不是改变现有网址。将代码更改为类似以下内容应该会导致在Realm的配置中设置正确的URL:

let groupContainerUrl = NSFileManager.defaultManager().containerURLForSecurityApplicationGroupIdentifier("group.net.exchange.On")!
let realmUrl = groupContainerUrl.URLByAppendingPathComponent("db.realm")