Core Data(CRUD)With Swift4.2For Beginners
Core Dataは、AppleがmacOSおよびiOSオペレーティングシステムで提供するオブジェクトグラフおよび永続性フレームワークです。 Mac OS X10.4TigerおよびiPhone SDK3.0を搭載したiOSで導入されました。 これにより、リレーショナルエンティティ属性モデルによって編成されたデータをXML、バイナリ、またはSQLiteストアにシリアライズできます。
Core Dataを初めて使用する開発者は、SQLiteとCore Dataの違いに混乱することがよくあります。 SQLiteまたはCore Dataが必要かどうか疑問に思っている場合は、間違った質問をしています。 コアデータはデータベースではないことに注意してください。
:
- データ制約機能を持っています。
- は、ディスクに格納されたデータに対して動作します。
- は、メモリにロードせずにテーブルを削除してデータを編集できます。
- コアデータと比較して遅い。
コアデータ:
- 必要に応じて、ビジネスロジックで実装する必要がある場合は、データ制約がありません。
- はメモリ上で動作します。(データはディスクからメモリにロードする必要があります)
- テーブルを削除または更新する必要がある場合は、データ全体をロードする必要があります。
- レコード作成の面で高速です。(それらを保存するには時間がかかる場合があります)
さらに、バックエンドのコアデータとしてのSQLiteとは別に、データをディスクに格納するためにXMLまたはバイナリ形式を使用できます。
コアデータの制限
コアデータは素晴らしいフレームワークですが、いくつかの欠点があります。 これらの欠点は、フレームワークの性質とそれがどのように機能するかに直接関係しています。
コアデータは、管理するオブジェクトグラフをメモリに保持するため、その魔法を行うことができます。 これは、レコードがメモリに入った後にのみ操作できることを意味します。 これは、データベースでSQLクエリを実行するのとは大きく異なります。 何千ものレコードを削除する場合、Core Dataは最初に各レコードをメモリにロードする必要があります。 誤って実行すると、メモリとパフォーマンスの問題が発生することは言うまでもありません。
もう一つの重要な制限は、コアデータのスレッドモデルです。 フレームワークは、単一のスレッド上で実行されることを期待しています。 幸いなことに、コアデータは長年にわたって劇的に進化しており、フレームワークは、マルチスレッド環境でのコアデータの操作をより安全かつ容易にするた
複雑なオブジェクトグラフを管理する必要があるアプリケーションには、Core Dataが最適です。 無関係なオブジェクトを一握りだけ保存する必要がある場合は、軽量のソリューションまたはuser defaultsシステムを使用する方が良いかもしれません。
コアデータのデモ(作成、取得、更新、削除)
コアデータの基本を実証するために、コアデータモジュールを選択したシングルビュー iOSアプリを作成しましょう。
まず、新しいプロジェクトを作成し、”コアデータを使用”を選択しましょう。 既存のプロジェクトにそのフレームワークを追加することはできますが、すべてがすでに配線されているため、その場所から追加する方が簡単です。プロジェクトが作成されると、CoreDataTestのようなファイルが表示されます。xcdatamodeldが追加されました。
をクリックすると、データモデルを表すエンティティを設定できるツールが表示されます。 あなたはそこに各エンティティのためにいくつかのことを定義することができますが、私たちのために属性と関係が最も重要になります。
これで、Core Dataをサポートしたデモプロジェクトが作成されました。 このXcodeテンプレートには、新しいファイルCoreDataCRUDである
- の2つの注目すべき変更があります。Xcdatamodeld
- AppDelegate。コアデータスタックコードを持つswiftファイル
コアデータスタック
AppDelegate内のコアデータスタックコード。swiftにはコメントの形で明確なドキュメントがありますが、要するに、persistentContainerを設定し、変更があればデータを保存します。 AppDelegateはアプリが起動するとすぐに実行される最初のファイルなので、コアデータスタックからコンテキストを保存してフェッチすることができます。
これで、Userエンティティ内のデータをモデル化しました。 いくつかのレコードを追加してCoreData
に保存するときは、CoreDataをviewcontrollerにインポートします。swift
Core Dataへのレコードの作成
core Dataへのレコードの追加プロセスには、次のタスクがあります
- appdelegateからpersistentContainerを参照
- persistentContainerからコンテキストを作成
- ユー5126>
- 各キーのレコードの値を設定します
データを取得します
プロセス 保存されたデータをフェッチするのも非常に簡単です。 次のタスクがあります
- エンティティ(この例ではユーザー)のNSFetchRequest型の要求を準備します
- 必要に応じてフィルタデータの述語を使用します
- の配列の形でコンテクストから結果をフェッチします
- 特定のキーの値を取得するために配列を反復します
私たちは、データをフェッチすることができます次のコードを使用してユーザーエンティティから。
更新データ
更新レコードのために最初に、上記のデータ取得プロセスと同じように述語を使用してデータを取得/取得する必要があります。 次に、
- に従ういくつかの手順の下で、エンティティ(この例ではユーザー)の述語で要求を準備します
- レコードをフェッチし、キー
- で新しい値を設定し、最後にデータを作成するのと同じコンテキストを保存します。
データの削除
削除レコードの場合は、まずfetchrequestで削除したいオブジェクトを見つける必要があります。 次に、delete record
- のいくつかの手順に従って、エンティティ(この例ではユーザー)
- Fetch recordの述語を持つ要求を準備し、
- を削除してコンテキストを作成します。削除(オブジェクト)呼び出し(下に添付されている参照画像)
まあ、これはコアデータには十分ではありません、コアデータではデータの変更を追跡し、述語を追加し、データベースの複雑な関係を追加することで、多くの複雑 より多くのコアデータを使用すると、物事はより複雑になります。