4

私は Core Data について学ぼうとしており、Apple の「場所」チュートリアルに従っています。私が遭遇した差し迫った障害の 1 つは、Core Data を使用するアプリケーションの構築を既に開始していることです。シングルビューアプリケーションです。

このアプリケーションで Core Data を利用するには、どのような手順を踏む必要がありますか? チュートリアルでは、プロジェクトの作成時に「ストレージにコア データを使用する」チェックボックスを選択するように指示されていますが、プロジェクトの作成後にコア データを有効にする方法が必要です。

助けていただければ幸いです。ありがとう。

4

6 に答える 6

14

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.) 最後に、変数のアクセサ メソッドを実装します。

于 2012-07-26T10:25:01.393 に答える
2

Targets -> Build Phases -> Link Binary with librariesに移動し、追加しCoreData.frameworkます。あなたは行く準備ができているはずです...

于 2012-04-10T11:57:38.967 に答える
2

もちろん、アプリを開始または作成した後でコア データ サポートを追加することもできます。

次のことをお勧めします。

  • コア データ フレームワークをターゲットに追加する
  • オブジェクトモデルを追加 「新しいファイルを追加 -> コアデータ -> データモデル」
  • 初期オブジェクト モデルを作成する
  • オブジェクト モデル内のすべてのモデルに対して NSManagedObject サブクラスを作成する
  • シングルトン/静的インスタンス( singleton)を実行するコントローラー(サブクラス NSObject )を作成します
  • コントローラーに、「getObjectsXYZ」、「saveData」などのデータレイヤー メソッドを追加します。

  • [[mycontroller sharedInstance] getObjectYByName:@"some text"]既存のアプリでは、「 」などのコントローラ クラスを介してオブジェクトをロードできます。

もちろん、コアデータを掘り下げる必要があります。:)

ORM に慣れている場合は、mogenerator vim Rensch を参照してください。 http://rentzsch.github.com/mogenerator/

これにより、データモデルが非常に簡単になります。私はそのツールに誓います!

于 2012-04-10T12:00:03.013 に答える
0

Core Data にアクセスするために必要なコードの追加の種類を確認する必要がある場合は、Core Data を含むダミー プロジェクトを作成し、それをサポートするためにアプリ デリゲートにあるメソッドの種類を調べます。

または、独自のクラスに Core Data アクセス コードを配置するという、より優れたアプローチを採用することもできます。その戦略の良い説明はここにあります: http://nachbaur.com/blog/smarter-core-data

于 2012-04-10T12:02:42.867 に答える
0

正直なところ、ビューが 1 つしかない場合は、チュートリアルにあるようにアプリケーションを最初から作成するのがおそらく最も簡単です。含めなければならない細かい部分がかなりあり、長期的には多くの時間を節約できます。

ただし、手動で行うことができます。

  • Core Data フレームワークをプロジェクトに追加する
  • データ モデルを追加する
  • アプリ デリゲートにコードを追加して、管理対象オブジェクト コンテキストを作成します (すべてのエラー条件を含む)。
于 2012-04-10T12:03:48.567 に答える
0

私の経験から、コア データをプロジェクトに含めるより良い方法は、[ストレージにコア データを使用] オプションを持つプロジェクト タイプを選択することです。既存のプロジェクトのファイルを新しいプロジェクトに含めることができます。もちろん、Core Data を手動で含めることもできますが、多くの問題が発生します。

于 2012-04-10T13:07:02.140 に答える