2016-06-29 14 views
1

私はレルムの新しいdefaultConfigurationを使用してstruggelingています(私はそう思う...)レルム例外エラードメイン= io.realmコード= 2「操作は許可されていない」

私が達成しようと何をすべきか。私はApple AppグループのIDにデフォルトのRealm URLを変更したいのですが、これは自分のAppのToday ExtensionとAppそのものの両方から同じRealmを使いたいからです。

私はあなたがAppDelegateに次を置く(slightly outdated Realm tutorial for WatchKit Extension)を見つけ:

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からの読み方のコーディングは、現在では例外としてクラッシュしています。

これは変更に対応しています: `let realm = try!レルム() ``

しかし、今では私は少し失われています;-)

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

答えて

2

問題は、Realmの設定で設定しているパスfileURLが、アプリケーショングループコンテナへのパスであり、そのパス内のファイルへのパスではないということです。これは、次のコードにある:

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

NSURL.URLByAppendingPathComponent(_:)は、既存のものを突然変異ではなく、新しいURLを返します。コードを次のように変更すると、レルムの構成に正しいURLが設定されます。

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

ありがとうございます。それでおしまい。ジョン、乾杯 –

関連する問題