1.) CoreDataTutorial という名前のビューベースのアプリケーションを作成します。
2.) コア データ フレームワークをプロジェクトに追加します。フレームワークを右クリックし、[追加] > [既存のフレームワーク...] を選択して CoreData.frameworks を見つけ、[追加] をクリックします。
3.) プロジェクトにデータ モデルを追加します。[リソース] を右クリックし、[追加] > [新しいファイル...] を選択します。[iOS] で [リソース] を選択し、[データ モデル] を選択して [次へ] をクリックします。
ファイルに CoreDataTutorial.xcdatamodel という名前を付けて、[次へ] をクリックします。
4.) 作成したばかりのファイル CoreDataTutorial.xcdatamodel をダブルクリックします。これにより、モデル オブジェクト エディターが開きます。
左上のペインで + 記号をクリックして、新しいエンティティを追加します。
右上のペインに名前を入力して、エンティティに「SomeName」という名前を付けます。
エンティティがまだ選択されている間に、上部中央のペインで + 記号をクリックし、[属性の追加] を選択します。この属性に「some_attribute_name」という名前を付け、文字列型に設定します。
5.) 次に、2 つのエンティティ間の関係を作成します。エンティティ ペインでエンティティを選択します。プロパティ ペインで + 記号をクリックし、[関係の追加] を選択します。リレーションシップに「creation」という名前を付け、Destination を Release に、Delete Rule を Cascade に設定します。
逆を行うには、エンティティ ペインで [リリース] を選択します。プロパティ ペインで + 記号をクリックし、[関係の追加] を選択します。リレーションシップに「creator」という名前を付け、Destination を Artist に設定し、Inverse を release に設定し、Delete Rule を Cascade に設定します。
オブジェクト エディタを閉じることができます。
6.) [その他のソース] を展開し、CoreDataTutorial_Prefix.pch をダブルクリックします。CoreData のインポートを追加します。
#ifdef __OBJC__
#import <foundation foundation.h="">
#import <uikit uikit.h="">
#import <coredata coredata.h="">
#endif
これにより、各ファイルにインポートする必要がなくなります。
7.) 次に、アプリ デリゲート ヘッダー ファイルと実装ファイルを設定します。
まずはヘッダーファイル。NSManagedObjectContext、NSManagedObjectModel、および NSPersistentStoreCoordinator の変数を作成する必要があります。
また、applicationDocumentsDirectory という名前のアクションを宣言します。このアクションは、データが SQLite ファイルに保存される調味料ディレクトリへのパスを取得します。そして、アプリが終了するときにコンテキストを保存するアクション。
作業が完了すると、ヘッダー ファイルは次のようになります。import ステートメントを CoreDataTutorial_Prefix.pch ファイルに追加したので、ここでインポートする必要はありません。
#import <uikit uikit.h="">
@class CoreDataTutorialViewController;
@interface CoreDataTutorialAppDelegate : NSObject <uiapplicationdelegate>
{
UIWindow *window;
CoreDataTutorialViewController *viewController;
@private
NSManagedObjectContext *managedObjectContext;
NSManagedObjectModel *managedObjectModel;
NSPersistentStoreCoordinator *persistentStoreCoordinator;
}
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet CoreDataTutorialViewController *viewController;
@property (nonatomic, retain, readonly) NSManagedObjectContext *managedObjectContext;
@property (nonatomic, retain, readonly) NSManagedObjectModel *managedObjectModel;
@property (nonatomic, retain, readonly) NSPersistentStoreCoordinator *persistentStoreCoordinator;
- (NSURL *)applicationDocumentsDirectory;
- (void)saveContext;
@end
8.) ARC を使用していない場合は、メモリの割り当て解除に注意してください。
9.) applicationDocumentsDirectory メソッドを実装します。
/**
Returns the URL to the application's Documents directory.
*/
- (NSURL *)applicationDocumentsDirectory
{
return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
}
10.) 次に、saveContext メソッドを実装します。
- (void)saveContext
{
NSError *error = nil;
NSManagedObjectContext *managedObjectContext = self.managedObjectContext;
if (managedObjectContext != nil)
{
if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error])
{
/*
Replace this implementation with code to handle the error appropriately.
abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. If it is not possible to recover from the error, display an alert panel that instructs the user to quit the application by pressing the Home button.
*/
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
}
}
11.) 最後に、変数のアクセサ メソッドを実装します。