MENU
コンテンツ再構築中

Swift: Core Data についての概要

アプリの設定等の保持するデータが単純で数が限られている場合、Swift: Core Data を使用しないデータの永続化について で説明した NSUserDefaults 等を使用すれば実現可能です。

一方、扱うデータの構造が複雑で、アプリからユーザーの入力した情報を保存したり、任意の条件で入力した情報の検索結果を返したい場合、メモリ等のパフォーマンスを考慮し Core Data を使用することになるかと思います。

今回はこの Core Data についての概要を自分に向けて説明したいと思います。

INDEX

目次

  • Core Data とは
  • RDB(リレーショナルデータベース)とは
  • O/R マッピングフレームワークとは
  • Core Data の概要

Core Data とは

Core Data とは MVC デザインパターンの Model を担当する Mac OS X や iOS のデータを永続化するための フレームワーク です。
わかりやすく言えば、Core Data とは SQLite へデータの入出力を行う命令や処理がまとめられたもので、iOS (Mac OS X) と SQLite の橋渡しをおこなってくれるものです。

SQL コマンドがわからなくても、Objecive-C や Swift でオブジェクトを扱うようにデータを渡せば、SQLite にデータが保存され、SQLite のデータをオブジェクトとして処理することができるようになります。

swift-coredata-description_01

他にも iOS (Mac OS X) から SQLite にデータの受け渡しをおこなう方法としては、 Objective-C の Wrapper ライブラリ FMDB を使用する方法があります。

また最近では SQLite 以外に、iOS や Android 等のモバイル環境に特化したデータベース Realm が注目されてますが、今回は Core data の説明なので、Realm については別の機会に記事にしたいと思います。

RDB(リレーショナルデータベース)とは

SQLite 等のデータベースのデータの中身は Excel のセルような構造になっていて、テーブルと呼びます。これは Swift でいうところのクラスに該当します。また、テーブルで構成されたデータの実体はレコードと呼ばれます。

Swift や Objecive-C であつかうクラスやオブジェクトの概念は、オブジェクト技術(オブジェクト指向)と呼ばれていますが、データベースの定義やテーブルやレコードでデータ構造を定義し、データの保存・抽出をおこなう技術を リレーショナル技術 と呼び、リレーショナル技術により構築されたデータベースを RDB(リレーショナル・データベース) と言います。

O/R マッピングフレームワークとは

オブジェクト技術リレーショナル技術 はどちらも データを扱うための技術 です。なぜこのように2つの技術が分かれているのかは、それぞれが扱うデータがどこに存在するかで理解することができます。

アプリで実行されるオブジェクトはメモリ上のデータであるのに対し、RDB のテーブルやレコードはストレージ上のデータそのものを指します。

アプリでデータを永続化するには、HDD や SDD といったストレージへデータを保存する必要があります。そこで Swift や Objecive-C から RDB へデータを受け渡しをする Core Data が必要となってくるのです。

Core Data はオブジェクト(Object)とリレーショナル(Relational)のデータを置き換える役割を果たすため、O/R マッピングフレームワーク(O/R マッパー) と呼ばれます。

swift-coredata-description_02

Core Data の概要

ここから具体的に Core Data の中身を見て行きたいと思います。
Core Data のクラスで代表的なものは以下のとおりとなります。

エンティティ

データベースのテーブルに相当するものです。
エンティティの実体は XML で Xcode のモデルエディタで定義します。

NSManagedObject

データベースのレコードに相当するものです。
エンティティクラス、モデルクラス、テーブルのレコードといったモデルデータ全体の設定を行います。

NSManagedObjectModel

エンティティ同士の関連を管理するクラスです。データベースの構造(スキーマ)に相当するもので、属性(フィールド)や関係(表)の関連といったモデルの定義をおこないます。
アプリそのものの根幹となる部分です。

NSManagedObjectContext

データベースのクエリに相当するものです。
Core Data では、このオブジェクトを使用しデータの検索・挿入・変更・削除・Undo / Redo といったデータの操作を行います。

NSFetchRequest

データの取得を行うときに使用します。1件だけのデータ取得であれば NSFetchRequest を使用すればいいかと思います。

NSFetchedResultsController

NSManagedObject オブジェクトを監視するコントローラクラスで、NSFetchRequest からデータの取得を行うときに使用します。
NSManagedObject オブジェクトが挿入・変更・削除された時に NSFetchedResultsControllerDelegate オブジェクトに通知します。
UITableView の indexPath に対応しているため、sectionrow などのデータにアクセスしやすくなります。

NSPersistentStore

データベースの抽象化クラスでデータベースの情報を管理します。

NSPersistentStoreCoodinator

NSPersistentStore を管理するクラス。データベースを複数管理する際にも使用します。
NSPersistentStore と NSManagedObjectContext を仲介するクラスで、NSPersistentStore クラスを使い、ファイルの読み書きを行ないます。

Core Data で使用するクラスやオブジェクトを図でまとめると以下のようになります。

swift-coredata-description_03

まとめ

今回は Core Data の概要とデータベースについてざっくりと説明しました。次回は具体例として Core Data を使用し、ユーザーが入力した情報を表示するアプリを作成してみたいと思います。

この記事がみなさんのお役に立ちましたら、下記「Share it」よりブックマークやSNSで共有していただければ幸いです。

Please share it!
  • URLをコピーしました!
  • URLをコピーしました!
INDEX