2011-01-11 9 views
0

私はObjective Cを初めて使っています。これまでのところ、CoreDataを打つまでは、これまでのところすべてがうまくいっていました。私はそれを動作させることができません!かなり簡単なことに何時間も費やした後、私は賢明なところにいる。appDataを使ったCoreDataの問題

私が間違ってやっていることを把握助けてください:

  • 私は、新しいWindowsベースのアプリケーションを作成し、xcdatamodelで
  • 「を保存するためにコアデータを使用する」にチェック、私は名前付きエンティティを作成しました1つの属性 'recipeName'を持つ 'RecipeData'それはアプリケーション代理人の文字列
  • です。私はXMLファイルを読み込んで解析します。レシピ名を解析するときは、次のものを使用します。

recipeData *dataName = (recipeData *) [NSEntityDescription insertNewObjectForEntityForName:@"RecipeData" inManagedObjectContext:managedObjectContext];

私は次のエラーを取得する:ビッグ3つの質問に私をリード

terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '+entityForName: could not locate an NSManagedObjectModel for entity name 'RecipeData' 

  • は私が間違っているのことを本当に明らかに何がありますか?
  • 私がチェック以来のストレージのためのコアデータを使用して、「次のコードは、アプリケーションデリゲートの.hに自動的に注入されるようだ:

    @private NSManagedObjectContext * managedObjectContext_。

     NSManagedObjectModel *managedObjectModel_; 
    
         NSPersistentStoreCoordinator *persistentStoreCoordinator_; 
    

    @property(nonatomic、retain、readonly)NSManagedObjectContext * managedObjectContext;

これは私が使用しているコードに干渉しますか?

  • * myManagedObjectContextという新しいNSManagedObjectContextを作成しようとしましたが、うまくいかなかった。

もう一つのちらほら、私は右の私のコードの上に次の行を追加します。

を( "NO CONTEXT" @)(managedObjectContext == nilを){

のNSLogであれば、
}

コンソール版画 "NO CONTEXT"

私は本当にすべての助けに感謝。ありがとう。

+0

:上記のように書くこともできるように、プロパティの読み取りが、getterメソッドを呼び出した場合と同じである

注意。独自のmanagedObjectContext変数とプロパティを削除し、代わりにself.managedObjectContextを使用します。 – ughoavgfhw

+0

感謝します!それを解決し、私はコードを変更しました:recipeData * dataName =(recipeData *)[NSEntityDescription insertNewObjectForEntityForName:@ "recipeData" inManagedObjectContext:self.managedObjectContext]; –

答えて

0

managedObjectContextはどこですか?それはmanagedObjectContext_のタイプミスですか?プロジェクトテンプレートは、前者ではなく後者を作成します。標準のプロジェクトテンプレートで提供されているコードで上記のコードを使用すると、構文エラーが発生します。私はいくつかの名前を変更したと思いますか?

あなたはmanagedObjectContextを象牙として使用しているようです。それはプロパティです。クラス内には、オブジェクトコンテキストへの参照を保持する専用のmanagedObjectContext_ ivarがあります。これにはアクセスしないでください。managedObjectContextプロパティにアクセスする必要があります。このプロパティに初めてアクセスすると、getterメソッドによってコンテキストが作成されます。プロパティにアクセスしていないので、getterメソッドは呼び出されず、コンテキストは決して生成されません。

recipeData *dataName = (recipeData *) [NSEntityDescription insertNewObjectForEntityForName:@"RecipeData" inManagedObjectContext:managedObjectContext]; 

...あなたは、このようなコードを使用する必要があります:

recipeData *dataName = (recipeData *) [NSEntityDescription insertNewObjectForEntityForName:@"RecipeData" inManagedObjectContext:self.managedObjectContext]; 

self.ビット

はどこでこのようなコードを持っています。これは、selfオブジェクトのプロパティにアクセスしていて、メソッドが呼び出されているオブジェクトからivarにアクセスしていないことを意味します。私は、テンプレートが提供するデフォルトのコンテキスト・ロード・メソッドを使用することをお勧めし

recipeData *dataName = (recipeData *) [NSEntityDescription insertNewObjectForEntityForName:@"RecipeData" inManagedObjectContext:[self managedObjectContext]]; 
+0

ありがとうございました! –

関連する問題