私は同じ講義シリーズに非常によく従っていました。この特定の例では、Flickrからデータ(Photographers and Photos)を取得し、CoreDataにロードします。このアプリケーションではCoreDataを使用する必要はありませんでした。アプリケーションロードごとにflickrから新しいデータを取得する必要があるため、永続的に保存する必要はありません。以前のデモのアプリを読み込むflickrを使用していたのは、学生が既にそれに精通していた(CoreDataの説明に集中できるようにしたため)。しかし、リックスターが言及したように、ディスクにコンテキストを保存せずにコアデータを使用することには大きなメリットがあります。
パウロは、デモの前に講義で説明したように、コアデータベースは、いずれかによって(iOS5をして)作成することができます:新しいプロジェクトを作成するときにアプリテンプレート用
- クリックする「使用コアデータ」。
- UIManagedDocument
を使用して最初のアプローチの背後にある考え方は、Xcodeのは、あなたのドキュメントディレクトリ/永続ストアコーディネータ/およびモデルを設定するAppDelegate内のコードの束を置くということです。次に、管理されたオブジェクトCONTEXTを初期ビューコントローラ(パブリックAPIにNSManagedObjectContextプロパティが必要です)に渡します。そこから、他のViewControllerにセグメンテーションするときにビールのようなコンテキストを渡すことができます。コンテキストを回すことは、コアデータベースにアクセスするための正しい手順です。
あなたのAppDelegateが残されていることを除いて、UIManagedDocumentの使い方は非常に似ています。あなたのアプリケーションのドキュメントディレクトリからのURLパスを使用してUIManagedDocumentを作成します(注:ファイルが既に存在しているか、存在しているか、開いていないか、または存在していないかどうかを手動で確認する必要があります)。次に、上記と同じ方法でこの文書のコンテキストを使用することができます。
別の注:AppDelegateでコンテキストへのポインタを作成して、アプリケーションがクラッシュしたり終了したときにコンテキストを明示的に保存できるようにすることをお勧めします。
persistent storeコーディネータは自動的に設定され、persistentStoreOptionsプロパティを使用して設定できます(実際にはコンテキストを永続的に保存する必要があります)。またはUIManagedDocumentをサブクラス化して、必要なメソッドをオーバーライドする必要があります。
は、どちらの方法が同じように動作し、同じ制御とアクセスを提供UIManagedDocumentドキュメント
http://developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/UIManagedDocument_Class/Reference/Reference.html
で概要をお読みください。 UIManagedDocumentsを使用すると、複数のデータベースを複数のsqliteファイルで作成することができます。必要になるまでデータベースの作成/設定を待つこともできます。 「コアデータを使用する」オプションは、アプリケーションのロード時に設定する単一のコアデータベースを提供し、AppDelegateの周りにCoreDataを集中化し、コーディング時間を節約し、高速トラックアプリケーションに適しています。私はUIManagedDocumentが好きです。
コアデータオプションがチェックされていない状態でアプリを起動し、AppDelegateに追加したい場合は、コアデータをチェックして新しいプロジェクトを作成し、すべてのコードをAppDelegateにコピーしてくださいドキュメントディレクトリにアクセスするための便利な方法もあります)。
更新日: ちょうど他の便利さを追加したいと思います。管理対象オブジェクトコンテキストは、あなたのappDelegateに格納されている場合は、あなただけの
NSManagedObjectContext* context = [[(AppDelegate*) [UIApplication sharedApplication] delegate] myManagedObjectContext];
を使用して、アプリでどこでもアクセスすることができ、これは、それを周りに渡すために持っ否定します。
CoreDataアプリケーションの場合、モデルを変更する場合は、シミュレーションを再構築する前に、シミュレータでアプリを手動で削除してください。それ以外の場合は、古いファイルを使用するため、次のビルドでエラーが発生します。
長年の答えの上に、AppDelegateのバックポインタを使用して、どこからでもコンテキストを取得するようにしましたが、推奨アプローチではありません。 – Patrick
絶対に光り輝く答えです。それに加えて、UIManahegDocumentを保存するためのコードスニペットがここにあります:[document.HttpRequest:document.fileURL forSaveOperation:UIDocumentSaveForOverwriting completionHandler:NULL]; – brainray