2

コアデータが実際に何であるかについて、私は本当に混乱しています。または、私の質問は、データベースを扱う場合、Core Data を使用しますか? たとえば、データベースから値にアクセスしたい場合、Core Data を使用してそれらの値にアクセスしますか? この問題にどのようにアプローチしますか?

助けてくれてありがとう。

4

3 に答える 3

8

Core Data は、「オブジェクトの永続化」の作業を行うフレームワークです。つまり、オブジェクトのコレクションをディスクに保存し、後で再度ロードするのに使用できるコードです。大量のデータを保存し、一度に必要なオブジェクトのみをロードし、メモリが不足しているときにオブジェクトをアンロードできるようにするために、多くの作業が行われます。

Core Data はこれを達成するためにデータベースを使用できますが、それはビジネスであって、あなたのものではありません。Core Data を使用する場合、それはブラック ボックスです。データを保存してから、邪魔にならないように指示します。

Web サーバー上の MySQL データベースなど、既存のデータベースとやり取りしたい場合は、まったく別の問題です。Core Data を使用してオブジェクトのローカル コピーをデバイスに保存することもできますが、その場合、Core Data はオブジェクトが他のデータベースからのコピーであることを気にしません。気にしません。

于 2012-10-09T23:02:53.490 に答える
4

これは、iOS アプリケーションにデータを保存するための便利でネイティブな手段です。さまざまな sqlite ツールで作成されたファイルを表示できますが、それを sqlite と考えないでください。代わりに、アプリにとって重要な情報のオブジェクト グラフを操作するためのツールと考えてください。

私は主に2つの方法でそれを使用しました。最初に、アプリにとって重要な一連の静的データを保存しました。あるケースでは、屋内マッピング アプリケーションの大量の位置データでした。ウェイポイントの大量の CSV ファイルとして到着したものは、コア データに変換されました。Core Data は、すべての情報を含むアプリケーションに同梱されている sqlite ファイルを準備できるため、これには非常に役立ちました。Web サービスからの更新は、情報を最新に保つために Core Data に追加される CSV として届きます。実行時に、位置情報オブジェクト (ユーザーがいるウェイポイント) が述語 (つまり、ユーザーがタップしたポイント) で取得され、そのオブジェクトは、Core Data の関係を通じて、そのポイントから移動できる場所を示します。Core Data は、屋内マップを介して A* ルーティングを実行するために必要な情報を提供しました。

2 つ目は、大量のオブジェクトが JSON として到着し、それらのオブジェクトを後で保存してアクセスできるようにしたい場合に最適です。ユーザーとユーザーに関するいくつかの情報を持つ典型的なアプリがあるとしましょう。それをモノと呼びましょう。ユーザーはモノを持っています。ユーザーについて知りたい場合は、述語 (通常は「名前」など) を使用して Core Data レコードを取得し、ユーザーについて保存したすべての情報を取得します。ここでも、リレーションシップを利用してユーザーのつながりを調査し、情報を簡単に表示できます。おそらくユーザーには多くのモノがあり、「user.things」と言うと、それらのモノを表す NSManagedObjects の NSSet を取得できます。

データベースのように使用します。その有用性は、iOS コードのどこからでも簡単にアクセスでき、情報を簡単に保存および取得できることです。フォルトを使用すると、1 つのオブジェクトを取得し、関係をたどることによって、関係を介して接続された任意のオブジェクトに移動できます。データ モデル エディターで属性と関係を自分で定義するため、格納する必要があるものに合わせて簡単にカスタマイズできます。私にとって、これは iOS で最も使用され、最も便利な部分の 1 つです。

Core Data からの情報の表示を自動化したい場合は、NSFetchedResultsController を使用してフェッチを開始し、デリゲート メソッドを介して基になるデータの変更に応答できます。NSFetchedResultsController をデータ ソースとして使用するように UITableView を設定すると、セルに表示されるオブジェクトが変更されるたびにテーブルを自動的に更新することができます。定期的に情報を更新し、表示内容を最新に保ちたいアプリに非常に便利です。

オブジェクト モデルが変更された場合、既存の情報をすべて維持し、新しいモデルに移行することができます。Core Data は、可能な場合は自動 (軽量の移行) を管理します。または、より根本的な変更を行った場合は、移行を処理するためのルールを提供できます。

Core Data の制限は、バイナリの保存には適していないことです。保存する必要がある画像がある場合は、実際のデータを保存しようとするよりも、画像の場所へのパスを保存する方がはるかに優れています。

于 2012-10-09T22:59:36.783 に答える
3

はい、デバイスにローカル データベースが必要な場合は、Core Data が適切なテクノロジです。Core Data Programming Guideから調査を開始することはおそらく理にかなっています。

代わりにSQLite (Core Data がバックエンドで使用する) を使用することもできますが、Core Data にはいくつかの重要な利点があり、iOS で推奨されるデータベース インターフェイスです。ただし、何らかの理由で SQLite を使用することに決めた場合は、FMDB Objective-C SQLite wrapper の使用を検討することをお勧めします。

しかし、Core Data は一般的に進むべき道です。

于 2012-10-09T22:58:14.493 に答える