2012-04-10 2 views
4

私はコアデータについて学習しようとしており、アップルの「場所」チュートリアルに従っています。すぐ直面する問題は、Core Dataを使用したいアプリケーションの構築をすでに開始したことです。これは単一ビューアプリケーションです。既存のシングルビューアプリケーションでコアデータを使用する

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

本当にありがとうございました。ありがとう。ライブラリとCoreData.frameworkを追加すると>リンクバイナリ - >ビルドフェーズからターゲット

+0

[コアデータの学習に最適なリソースは?](http://stackoverflow.com/questions/2956841/best-resources-for-learning-core-data) –

+0

ありがとうございました。私は初心者であることを踏まえて、問題の代替ルートを辿って、後でコアデータを調査するかもしれないと思います。私の問題はスコアボードを作成することですが、代わりにplistを読み書きしようと思うかもしれません。 – garethdn

答えて

14

1.)CoreDataTutorialというビューベースのアプリケーションを作成します。

2.)コアデータフレームワークをプロジェクトに追加します。フレームワークを右クリックし、[追加]> [既存のフレームワーク]を選択します。CoreData.frameworksを見つけて追加をクリックします。

3.)データモデルをプロジェクトに追加します。 「リソース」を右クリックし、「追加」>「新規ファイル...」を選択します.iOSの下で「リソース」を選択し、「データモデル」を選択して「次へ」を押します。

ファイルにCoreDataTutorial.xcdatamodelという名前を付け、nextを押します。

4.)作成したファイルCoreDataTutorial.xcdatamodelをダブルクリックします。モデルオブジェクトエディタが開きます。

左上のペインで、+記号をクリックして新しいエンティティを追加します。

右上のペインに名前を入力して、エンティティ名「SomeName」に名前を付けます。

エンティティが選択されている間に、上部中央のペインで+記号をクリックし、[属性の追加]を選択します。この属性「some_attribute_name」に名前を付け、Stringに設定します。

5.)次に、2つのエンティティ間のリレーションシップを作成します。エンティティペインでエンティティを選択します。プロパティペインの+記号をクリックして、[関係を追加]を選択します。関係に「作成」という名前を付け、宛先をリリースに設定し、削除ルールをカスケードに設定します。

逆を行うには、エンティティペインで[リリース]を選択します。プロパティペインの+記号をクリックして、[関係を追加]を選択します。関係に「creator」と名前を付け、DestinationをArtistに設定し、Inverseを解放に設定し、Deleteルールをカスケードに設定します。

これでオブジェクトエディタを閉じることができます。

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ファイルに保存されるcondimentsディレクトリへのパスを取得します。また、アプリケーションが終了したときにコンテキストを保存するアクション。

ここでは、完了後のヘッダーファイルの外観を示します。 CoreDataTutorial_Prefix.pchファイルにimportステートメントを追加したので、ここでインポートする必要はありません。あなたはARCを使用していない場合

#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)は、メモリ

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)最後に、あなたの変数のためのあなたのアクセサメソッドを実装し、それはそれです。

+1

あなたはあなたの答えを広げて、付属のリンクの内容と質問にどのように答えているかを精緻化/要約できますか?リンクのみの回答は、しばしば迷惑メールとして解釈される/回答ではなく、リンク腐敗の対象となり、将来の訪問者にとってあなたの答えが役に立たなくなります。 – forsvarir

2

移動します。あなたはすごくいいはずです...

2

もちろん、アプリケーションを起動したり作成した後で、コアデータのサポートを追加できます。

私は次の操作を行うためにあなたをお勧めします:

  • 作成したオブジェクトモデルを追加するには、ターゲット
    • 追加コアデータフレームワークを「 - - >コアデータ>データモデルの新しいファイルの追加」最初のオブジェクトモデル
    • オブジェクトモデル内のすべてのモデルのNSManagedObjectサブクラスを作成する
    • シングルトン/スタティックインスタンスを実行するコントローラ(サブクラスNSObject)を作成します(お使いのコントローラで)
    • 等「getObjectsXYZ」、「SaveDataを」のようないくつかのデータ・レイヤ方法、あなたはその後、「[[mycontroller sharedInstance] getObjectYByName:@"some text"]

    • のようなあなたのコントローラクラスを介してオブジェクトをロードすることができ、既存のアプリで

    • を追加

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

    ORMの場合は、mogenerator vim rentschをご覧ください。 http://rentzsch.github.com/mogenerator/

    これは、データモデルを非常に簡単にします。私はそのツールを誓う!

  • +0

    モゴネレーターのためにここにプラス! –

    0

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

    または、自分のコアデータアクセスコードを独自のクラスに持つより良い方法に進むことができます。その戦略の良い説明はここにあります:http://nachbaur.com/blog/smarter-core-data

    0

    正直なところ、1つのビューしかない場合は、チュートリアルで言うように、最初からアプリケーションを作成するのが最も簡単でしょう。あなたが含める必要があるビットとピースがかなりあり、長期的にはあなたに多くの時間を節約することができます。

    しかし、あなたが手でそれを行うことができます。

    • プロジェクトにコアデータフレームワークを追加
    • データモデルを追加します(管理対象オブジェクトコンテキストを作成するために、アプリのデリゲートにコードを追加します。
    0

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