CoreDataのセットアップコードを調べてみた@iOS13

これまでもCoreDataを使ってきていましたが、iOS13になって、SwiftUIともつながりやすくなったとも聞いたので、CoreDataのセットアップコードに変化があったのかを見てみました。

チェックした環境

  • XCode11.4
  • iOS13, macOS Catalina

CoreData向けに追加されるコード

AppDelegate内に、以下のコードが追加されます。

上記のコードは、SwiftUIになっても特に変更はありません。従来のCoreDataサポートを設定したプロジェクトで生成されていたコードと同じです。

SceneDelegate.swiftにもコードが追加されています。

前半の”let context = …”が、新規に追加された行で、後半の”let contentView = …”は、既存の行に”.environment…”以降が既存の行に追加されたものとなっています。

コードやコメントの通りですが、AppDelegateで保持されているpersistentContainerの中のManagedObjectContextを、environmentObjectとして設定しています。

MacOS向けのDocument-basedだとどうなる?

Document.swift内に以下のコードが追加されました。

違いは、let contentView =ContentView().environment …の箇所ですね。
ここで、ContentViewにEnvironmentObjectを明示的に設定してますね。

iOSのアプリであれば、1つのドキュメントなので、Framework内で遮蔽できるけれど、MacOSでDocument-Basedの場合には、
異なるドキュメントを対象にしたビューが複数開かれるかもしれないために、ここでEnvironmentObjectを設定してるんでしょうね。
# コメントでもきちんと説明してくれてますね。親切。

違いは?

Document-basedアプリの時に、EnvironmentObjectを設定するコードが付加されていましたが、それ以外については、
以前に生成されていたコードと同じでした。

ということは、Environment等のオブジェクトで紐づけられていることで、連携しやすくなっているので、
アプリ側でのセットアップに変更はほぼなくて、Framework側の努力(?)で接続性が良くなっているという理解で良いようです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です