2012-04-14 15 views
0

私はCoreDataを覚えていて、私はrootとしてUITableViewを持ったテストアプリケーションを手に入れて、データをうまく表示しています。これは、データを引き出すデータベースが正しく設定されていることを示します。私のアプリケーションに私のCoreDataを表示しようとしています

今私は(ストーリーボードを経由して)初期ビューコントローラとしてのUIViewControllerを持つようにしようとしていますし、それは私に、このエラーを与え続けて -

はnilにモデルと

をNSPersistentStoreCoordinatorを作成できません

は、今私は、フォーラムやチュートリアルをたくさん読んでいると、彼らはすべて、基本的に私は私のxcdatamodelファイルはこの

URLForReと一致することを確認する必要があると言います出典:@ "Model" withExtension:@ "momd"]

さらに、私はUITableViewがルートビューであればデータを表示できます。

今、私は変更する場合:アプリの実行

- (NSManagedObjectModel *)managedObjectModel 
{ 
if (__managedObjectModel != nil) 
{ 
    return __managedObjectModel; 
} 
    //NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"Model" withExtension:@"momd"]; // I have commented out this line because the NSURL is no longer being used. 
__managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil]; 
return __managedObjectModel; 
} 

が、私はCoreDataファイルにリンクしていない午前としてテーブルビューは、私には理にかなっている、空である。この中

- (NSManagedObjectModel *)managedObjectModel 
{ 
if (__managedObjectModel != nil) 
{ 
    return __managedObjectModel; 
} 
    NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"Model"  withExtension:@"momd"]; 
__managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL]; 
return __managedObjectModel; 
} 

を。 - 問題は、私が持っている設定でアプリケーションを実行し、データを表示するにはどうすればいいですか?ジェフ・ウォルスキーによる最初の回答に

乾杯ジェフ


@response

おかげで答えを、私は正しい道の上だと思う - 私は削除するために、私のプロジェクトに少しそれを変更しなければなりませんでしたエラー。私は、だから私は、これは

- (NSManagedObjectModel *)managedObjectModel { 

エリアで

AppDelegate appDelegate = (AppDelegate) [[UIApplication sharedApplication] delegate]; 

を入れている知っている - それが正しいのですか?また、現在、appDelegate変数は警告として使用されていません。単純な問題かもしれませんが、今どこでその変数を使用しますか?乾杯ジェフ


私は私はあなたが@Jody Hagins後何であるかと思われるもの投稿している - それはあなたがすべてを設定する必要があります:-)

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator 
{ 
if (__persistentStoreCoordinator != nil) 
{ 
    return __persistentStoreCoordinator; 
} 

NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"ViewToNav.sqlite"]; 

NSError *error = nil; 
__persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]]; 


NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys: 
         [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption, 
         [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil]; 
if (![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error]) 
{ 

    NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
    abort(); 
}  

return __persistentStoreCoordinator; 
} 

乾杯ジェフ

+0

persistentStoreCoordinator()はどのように見えますか? –

+0

こんにちはジョディ、私はあなたが尋ねていると思うもののコードを追加しました:-) –

+0

ここにあなたのコードは、アプリケーションデリゲートにアクセスするには間違っています..あなたはポインタを使用していない...それはジェフのポストにあります。もう一度見に行ってください。また、あなたが混乱していると思うので、良い例のためにアップルが生成したコードを見てください。簡単な方法:Xcodeで、「新規プロジェクト」を選択し、「マスター詳細」を選択してCoreDataプロジェクトをチェックします。これを行う方法の良い例でプロジェクトを作成します。 –

答えて

1

お役に立てば幸いですあなたのアプリケーションデリゲートの中核データ。管理オブジェクトモデルは、ビューがアクセスできるアプリケーションデリゲートのプロパティである必要があります。あなたのビューコントローラでは、あなたが

MyAppDelegate *appDelegate = (MyAppDelegate*) [[UIApplication sharedApplication] delegate]; 

とアプリデリゲートにフックを得ることができますこれは、あなたが好きなビューコントローラからのフェッチを実行することができます。

EDIT:私たちは、アプリデリゲートにありますNSManagedObjectContextにアクセスできるように、我々は、ビューコントローラにappDelegateを持っている必要があります

理由があります。したがって、ビューコントローラにNSManagedObjectModelを入れる必要はありません。 NSManagedObjectContext(MOC)を使用すると、アプリケーションデリゲートに既に存在するコアデータスタック全体にアクセスできます。

アプリデリゲートでは、MOCをプロパティとして設定する必要があります。これで、View Controllerでこれを行うことができます。

myMOC = appDelegate.MOC; 

今すぐmyMOCにアクセスすると、コアデータにアクセスできます。 View ControllerでプロパティとしてNSFetchedResultsControllerを作成します。ゲッタメソッドでは、手順の1つはNSEntityDescriptionを作成することです。ここではself.myMOCを使用し、NSFetchedResultsControllerをコアデータモデルに結び付けます。

+0

答えをいただきありがとうございます。私は正しい道のりにいると思います。エラーを取り除くためにプロジェクトに少し変更する必要がありました。私は知っている AppDelegate * appDelegate =(AppDelegate *)[[UIApplication sharedApplication] delegate]; 私はこれを置いている " - (NSManagedObjectModel *)managedObjectModel {"エリア - 正しいですか? また、appDelegate変数が警告として使用されていません。単純な問題かもしれませんが、今どこでその変数を使用しますか? おかあさん –

+0

コードの混乱を避けるため、私は自分の回答を質問にコピーしました。乾杯。 –

+0

私は今、理解し始めていますが、これを置く場所を捜すつもりです。チップに感謝します。私は他の質問があるならば私は返信するかもしれません:-) –

関連する問題