基本
let container = NSPersistentContainer(name: "Sample")
NSPersistentContainer.init(name:)
By default, the provided name value is used to name the persistent store and is used to look up the name of the NSManagedObjectModel object to be used with the NSPersistentContainer object.
name
引数は、次の二つの用途で利用される。
- sqliteファイル名
- ManagedObjectModelファイル名
NSPersistentContainer(name: "Sample")
の場合、
Sample.sqlite
ファイルが作成される- ManagedObjectModelファイルとして、Bundle内の
Sample.momd
(または.mom
)が利用される
sqliteファイルはNSPersistentContainer.defaultDirectoryURL()
で示されるディレクトリ直下に作成される。
iOS 14.5では/Library/Application Support
となっていた。
パスのカスタマイズ方法
方法(1) ディレクトリを変更する
NSPersistentContainer.defaultDirectoryURL()
This method can be overridden in a subclass of NSPersistentContainer.
例えば/Document
を指定したい場合、次のようにする。
class MyPersistentContainer: NSPersistentContainer { override class func defaultDirectoryURL() -> URL { FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0] } } let container = MyPersistentContainer(name: "Sample") // sqliteファイルのパスは、 "{アプリケーションホーム}/Documents/Sample.sqlite"
方法(2) sqliteファイルのフルパスを指定する
NSPersistentContainer.persistentStoreDescriptions.url
に、ファイルのフルパスを指定する。
この場合、NSPersistentContainer(name:)
のname
や、NSPersistentContainer.defaultDirectoryURL
は無視される。
name
はManagedObjectModelファイルの検索だけに利用される。
let container = MyPersistentContainer(name: "Sample") let documentsUrl = FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask)[0] let sqliteUrl = documentsUrl.appendingPathComponent("cache.sqlite") container.persistentStoreDescriptions[0].url = sqliteUrl // sqliteファイルのパスは、 "{アプリケーションホーム}/Library/Caches/cache.sqlite"