はじめに
こんにちは、iOSアプリ開発Gの深山です。
CoreDataについての記事がかなり少なかったり、Swiftのバージョンが古かったり、内容が難しかったり…とあったので、初学者向けに簡単にまとめてみました。
CoreDataってなに?
CoreDataは、モデルオブジェクトを永続化するためのフレームワークです。
※永続化: 一時的なデータを保存して再利用できるようにすること
Xcode上で簡単にデータベースのようにデータ構造を設定できたり、アプリ上で扱うデータのCRUD処理を簡単に書いたりすることができます。
CoreDataは、オブジェクトとリレーショナルデータベース(以降 RDB)の橋渡し役を担い、メモリ上のデータを、SQLiteというRDBのレコード構造に変換して保存します。
また逆に、特定の条件に該当するRDBのレコードをオブジェクトに変換してメモリに展開してくれます。
オブジェクト技術とリレーショナル技術の2つの技術の違いを吸収し、両者のいいとこ取りをしたデータ管理技術と認識しておくと良いかと思います。
CoreDataのように、オブジェクトとレコードの変換を行うフレームワークのことを、O/Rマッピングフレームワークといいます。
※O/R: Object/Relational
オブジェクト技術とリレーショナル技術の説明と違いについてはこの記事では割愛します。
こちらの記事がとても参考になったので紹介します。
CoreDataの主なクラス
CoreDataで使う主なクラスを紹介します。
- NSPersistentContainer
CoreDataStackと呼ばれる、CoreDataで使うクラスをラッピングし、使えるようにしたクラス。アプリの起動時に生成される。 -
NSManagedObjectContext
データの検索や、生成、更新、削除などの変更操作やその追跡をするクラス。 -
NSManagedObject
データベースの1レコードに対応するモデルクラス。 -
NSManagedObjectModel
モデルの型やプロパティ、関係を管理するクラス。 -
NSPersistentStoreCoordinator
NSPersistentStoreを管理するクラス。モデル内で定義されているエンティティのインスタンス実体化を行う。 -
NSPersistentStore
SQLite(データベース)の情報を管理するクラス。
各クラスの関係を図にすると以下のようになります。
NSPersistentContainerに使いやすくラッピングされているため、基本的には、 NSPersistentContainerをインスタンス化し、付随するfetchを叩くことでデータが取得するなどができます。
まとめ
冒頭にも記載したように、古いバージョンの記事が多かったので、今回改めて調査してまとめました。
iOS10より導入された
NSPersistentContainerによって、CoreDataまわりの実装がスマートになったようです。
今回は概念を知ることにフォーカスしましたので、今後は実装方法もまとめてみようと思います。
最後まで読んでいただき、ありがとうございました。
参考文献
この記事を書いた人
最近書いた記事
- 2023.03.30【Swift】iOS 16で画面回転禁止処理を行っている箇所で無限ループが発生しクラッシュする
- 2023.03.27SwiftLintでカスタムルールを追加してみた
- 2022.09.30【Swift】CoreDataのユニットテストの環境構築
- 2022.09.30【Swift】CoreDataの概念を知る