ActorでCoreDataを使う
Actor内でCoreDataを使う方法。
プロジェクトの作成時に、CoreDataを使うにチェックをいれるとAppDelegate内にpersistantContainerが定義されます。
この定義を使ってCoreDataを使用する方法になります。
※厳密に言えばActor内だけでは警告を回避することはできませんでした。
汎用的に使用するシングルトン(非Actor)を用意します。
クラス変数として
var container: NSPersistentContainer?
を定義して、
init() {
Task {
self.container = await (UIApplication.shared.delegate as! AppDelegate).persistentContainer
}
}
にて初期化します。
CoreDataでやる処理の関数を用意します。
その関数にて
let context = container?.newBackgroundContext()
としてCoreDataで使用するコンテキストを定義します。
§通常使う「container.viewContext」では警告が出ます。
Actorからは、このシングルトンの関数を呼び出せば、メインスレッド制約に引っかかることなくCoreDataを使用できます。
persistantContainerをActor内で再定義するのが本来の形かもしれないですし、このやり方が、正しいのか分かりませんが、参考になれば。
§lazyで定義されているAppDelegateのpersistantContainer、初期処理でpersistantContainerの作成を確認してから進めています。
シングルトンのinit()の完了をしっかり待ってから、関数は使われるようにする必要があります。