NSPersistentContainer にカスタム store.sqlite URL を設定するにはどうすればよいですか?
NSPersistentContainer をサブクラス化するという醜い方法を見つけました:
final public class PersistentContainer: NSPersistentContainer {
private static var customUrl: URL?
public init(name: String, managedObjectModel model: NSManagedObjectModel, customStoreDirectory baseUrl:URL?) {
super.init(name: name, managedObjectModel: model)
PersistentContainer.customUrl = baseUrl
}
override public class func defaultDirectoryURL() -> URL {
return (customUrl != nil) ? customUrl! : super.defaultDirectoryURL()
}
}
いい方法はあるでしょうか?
背景: App Groups の共有ディレクトリに保存する必要があります。
ベストアンサー1
これはクラスで行いますNSPersistentStoreDescription
。クラスには、永続ストア ファイルが保存されるファイル URL を提供するために使用できる初期化子があります。
let description = NSPersistentStoreDescription(url: myURL)
次に、NSPersistentContainer
のpersistentStoreDescriptions
属性を使用して、このカスタムの場所を使用するように指示します。
container.persistentStoreDescriptions = [description]
注意:まだ存在しない場合でも、myURL
完全な を指定する必要があります/path/to/model.sqlite
。親ディレクトリのみを設定しても機能しません。