私は同じ講義シリーズを非常に密接にフォローしました。この特定の例では、Flickrからデータ(写真家と写真)を取得し、CoreDataにロードします。このアプリでは、アプリケーションをロードするたびにflickrから新しいデータをフェッチする必要があるため、CoreDataを使用する必要はありませんでした。したがって、永続的に保存しても意味がありません。教授は、学生がすでに慣れているので、前のデモのflickrフェッチアプリを出発点として使用していました(CoreDataの説明に集中できるようになりました)。ただし、ricksterが述べたように、コンテキストをディスクに保存せずにコアデータを使用することには大きなメリットがあります。
Paulがデモの前の講義で説明したように、コアデータベースは(iOS5で)次のいずれかによって作成できます。
- 新しいプロジェクトを作成するときに、アプリテンプレートの[コアデータを使用]をクリックします。
- UIManagedDocumentの使用
最初のアプローチの背後にある考え方は、Xcodeが一連のコードをAppDelegateに配置して、ドキュメントディレクトリ/永続ストアコーディネーター/およびモデルをセットアップすることです。次に、管理対象オブジェクトCONTEXTを最初のビューコントローラー(パブリックAPIにNSManagedObjectContextプロパティが必要)に渡し、そこから、他のビューコントローラーにセグエするときにビール瓶のようにコンテキストを渡すことができます。コンテキストを渡すことは、コアデータベースにアクセスするための正しい手順です。
UIManagedDocumentの使用は、AppDelegateがそのままになっていることを除いて、非常によく似ています。アプリのドキュメントディレクトリからのURLパスを使用してUIManagedDocument(おそらく最初のView Controllerで)を作成します(注:ファイルが既に存在するか、存在するが開いていないか、存在しないかを手動で確認する必要があります)。次に、上記と同じ方法でこのドキュメントのコンテキストを使用できます。
別の注意:アプリがクラッシュまたは終了したときにコンテキストを明示的に保存できるように(準備ができている場合のみ)、AppDelegateにコンテキストへのポインターを作成することをお勧めします。
永続ストアコーディネーターは自動的にセットアップされ、persistentStoreOptionsプロパティを使用して(実際、コンテキストを永続的に保存するために必要になります)、またはUIManagedDocumentをサブクラス化して目的のメソッドをオーバーライドすることで構成できます。
UIManagedDocumentドキュメント
http://developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/UIManagedDocument_Class/Reference/Reference.htmlで概要をお読みください
どちらの方法も同じように機能し、同じ制御とアクセスを提供します。UIManagedDocumentsを使用すると、複数のsqliteファイルに複数のデータベースを作成できます。また、必要になるまでデータベースの作成/セットアップを待つこともできます。「コアデータの使用」オプションは、アプリケーションのロード時にセットアップする単一のコアデータベースを提供し、AppDelegateを中心にCoreDataを一元化できるようにし、コーディング時間を節約し、ファストトラックアプリに適しています。UIManagedDocumentが好きです。
コアデータオプションをチェックせずにアプリを起動し、それをAppDelegateに追加したい場合は、コアデータをチェックして新しいプロジェクトを作成し、すべてのコードをAppDelegateにコピーします(3つのプロパティとそのアクセサー、およびドキュメントディレクトリにアクセスするための便利な方法)。最初のViewController、モデルなどを指す必要があります。
更新:もう1つの便利さを追加したかっただけです。管理対象オブジェクトのコンテキストがappDelegateに保存されている場合は、を使用するだけでアプリ内のどこからでもアクセスできます。
NSManagedObjectContext* context = [[(AppDelegate*) [UIApplication sharedApplication] delegate] myManagedObjectContext];
これはそれを回す必要をなくします。
CoreDataアプリの場合、モデルに変更を加えた場合は、再度ビルドする前に、必ずシミュレーターでアプリを手動で削除してください。そうしないと、古いファイルが使用されるため、次のビルドでエラーが発生します。