いっつも忘れちゃうのでメモ。
iOS 10からNSPersistentContainerでCoreDataを使うのがデファクトスタンダードになってますが、
その時に、CoreDataの機能そのままオンメモリでデータベースファイルとして保存せず使いたい場合がありますよね。
その時は、NSPersistentContainerのpersistentStoreDescriptions
に対して
NSInMemoryStoreTypeのtypeを持ったNSPersistentStoreDescription
を与えればよいです。
何も設定しない場合、SQLiteファイルに保存する形でCoreDataを扱います。
let container = NSPersistentContainer(name: "appname")
let persistentStoreDescription = NSPersistentStoreDescription()
persistentStoreDescription.type = NSInMemoryStoreType
container.persistentStoreDescriptions = [
persistentStoreDescription
]
container.loadPersistentStores(completionHandler: { (storeDescription, error) in
if let error = error as NSError? {
fatalError("Unresolved error \(error), \(error.userInfo)")
}
})
# 追記
URLにURL(fileURLWithPath: "/dev/null")
を設定することでもメモリ上での利用が可能みたいです
参考 https://developer.apple.com/videos/play/wwdc2018/224/?time=1838
container.persistentStoreDescriptions[0].url = URL(fileURLWithPath: "/dev/null")