0

私は遊んでいて、CoreDataを学び、UITableViewをルートとして使用するテストアプリケーションを入手したときに、データが正常に表示されます。これは、データをプルしているデータベースが正しく設定されていることを示しています。

現在、UIViewControllerを(ストーリーボードを介して)初期ビューコントローラーとして使用しようとしていますが、このエラーが発生し続けます-

nilモデルでNSPersistentStoreCoordinatorを作成できません

今、私はたくさんのフォーラムとチュートリアルを読みました、そしてそれらはすべて基本的に私のxcdatamodelファイルがこれと一致することを確認する必要があると言っています

URLForResource:@ "Model" withExtension:@ "momd"]

UITableViewがルートビューの場合も、データを表示できます。

今私が変更した場合:

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

これに:

- (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;
 }

アプリは実行されますが、TableViewは空です。これは、CoreDataファイルにリンクしていないため、私には意味があります。-問題は-取得したセットアップでアプリを実行してデータを表示するにはどうすればよいですか?

乾杯ジェフ


@ジェフウォルスキーによる最初の回答への応答

答えてくれてありがとう、私は正しい道を進んでいると思います-エラーを取り除くためにプロジェクトに少し変更しなければなりませんでした。私は知っています

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

だから私はこれを置いた

- (NSManagedObjectModel *)managedObjectModel {

エリア-それは正しいですか?また、appDelegate変数が使用されていないという警告が表示されるようになりました。単純な問題かもしれませんが、今どこでその変数を使用しますか?乾杯ジェフ


@JodyHaginsの後にあなたが何であるかを私が思うものを投稿しました-それがお役に立てば幸いです:-)

- (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;
}

乾杯ジェフ

4

1 に答える 1

1

アプリデリゲートですべてのコアデータを設定する必要があります。管理対象オブジェクトモデルは、ビューがアクセスできるアプリデリゲートのプロパティである必要があります。ビューコントローラでは、アプリデリゲートへのフックを次のように取得できます。

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

これにより、任意のViewControllerからフェッチを実行できます。

編集:

ビューコントローラにを含める必要がある理由は、アプリデリゲートにあるにappDelegateアクセスできるようにするためです。したがって、ビューコントローラにNSManagedObjectContextを配置する必要はありません。NSManagedObjectModelNSManagedObjectContextMOC)を使用すると、アプリデリゲートにすでに存在するコアデータスタック全体にアクセスできます。

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

myMOC = appDelegate.MOC;

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

于 2012-04-14T03:45:37.243 に答える