Here2.click

サブドメインを使用したい方は連絡ください。とかきつつ連絡先書いてないですけど…

ActorでCoreDataを使う

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()の完了をしっかり待ってから、関数は使われるようにする必要があります。

hide

コメントは受け付けていません。