2009-11-23 1 views
10

Xcode .xcdatamodelファイルエディタを使用してエンティティを設定しました。私はPersonという名前のエンティティを作成し、いくつかの属性を追加して、それを表す.mファイルを生成しました。それはすべて正常に動作します。insertNewObjectForEntityForName:

私はのようなコードの行を記述するために行く:

 
    Person * person = (Person*)[NSEntityDescription 
         insertNewObjectForEntityForName:@"Person" 
         inManagedObjectContext:managedObjectContext]; 

そして私が手:

がキャッチされない例外が原因アプリ 'NSInternalInconsistencyException' を終了、理由:「+ entityForName:できませんでしたエンティティ名、私は正確にかかわらず、場所の例を、次に「人」」

ためNSManagedObjectModelを見つけ、私は信じているため、ステップ・ステップが、私が思うに、私必見は、私のPersonエンティティがアクセス可能であるべきことをXcodeに伝える重要な「登録」ステップを見逃しています。また、managedObjectContextを「初期化」する方法もありませんでした。そのいずれか。

答えて

15

あなたがMOCを設定しなかったという事実は、ほとんど確実に問題です。具体的には、Personを定義するMOM(Managed Object Model)をロードしていない可能性があります。どこかのコードで、あなたがこのようなものが必要です:私はちょうど外の行をコピーしてい

NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator]; 
if (coordinator != nil) { 
    managedObjectContext = [[NSManagedObjectContext alloc] init]; 
    [managedObjectContext setPersistentStoreCoordinator: coordinator]; 

managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles:nil] retain];  

そして、このような何か:

persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]]; 

そして、このような何かをコアデータテンプレートのAppDelegate(コアデータを使用する新しいアプリケーションを作成する場合に得られるもの)。

これがあれば、xcdatamodelがビルドのコンパイルソースステップにリストされていることを確認してください。もちろん、Personが実際にxcdatamodelのエンティティ名であることを確認してください。エンティティ名はクラスと同じではありませんが、同じに設定されることがよくあります。

3

あなたはNSManagedObjectContextオブジェクトがnilの場合は、チェックすべき

-(void)initCoreData{ 
     NSError *error; 
     //Path to sqlite file. 
     NSString *path = [NSHomeDirectory() stringByAppendingString:@"/Documents/Level4.sqlite"]; 
     NSURL *url = [NSURL fileURLWithPath:path]; 

     //init the model 
     NSManagedObjectModel *managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil]; 

     //Establish the persistent store coordinator 
     NSPersistentStoreCoordinator *persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:managedObjectModel]; 

     if(![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:url options:nil error:&error]){ 

       NSLog(@"Error %@",[error localizedDescription]); 

     }else{ 
       self.context = [[[NSManagedObjectContext alloc ] init ] autorelease]; 
       [self.context setPersistentStoreCoordinator:persistentStoreCoordinator]; 
     } 

     [persistentStoreCoordinator release]; 
} 
2

コアデータの初期化を必要とします。

if (self.managedObjectContext == nil) { 
    NSLog(@"NSManagedObjectContext is nil"); 
    return nil; 
} 
+0

これは私のNSManagedObjectを次のビューに渡していないことを思い出させてくれました。そのため、上記のエラーが発生しました。ありがとう! – JasonBub

関連する問題