6

'Cannot create an NSPersistentStoreCoordinator with a nil model'アプリケーションをデバイスから削除した後、エラーが発生します。iPadデバイスでiPhoneアプリをテストしています。私はこのコードを入れて、ファイルが入っているかどうかを確認しましたAppDelegate.m

- (NSManagedObjectModel *)managedObjectModel {
    if (__managedObjectModel != nil) {
        return __managedObjectModel;
    }
    NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"Name" withExtension:@"momd"];
    if ([[NSFileManager defaultManager] fileExistsAtPath:[modelURL path]]) {
        NSLog(@"%@", [modelURL path]); //This is printed because file exists
    }
    __managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
    return __managedObjectModel;
}

問題は、[NSManagedObjectModel initWithContentsOfURL]nil値を返すことです。私は次のことをしましたが、成功しませんでした。

  1. これでmanagedObjectModelのインスタンス化を変更します__managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil];
  2. クリーンアップされたビルドフォルダーとクリーンアップされたプロジェクト
  3. Xcodeを再起動しました
  4. 再起動したコンピューター
  5. 「momd」を「mom」に変更
  6. .xcdatamodeldバンドルリソースのコピーとソースのコンパイルにあります
  7. .xcdatamodeldXcodeプロジェクトの名前を変更し、クリーンアップして閉じました。
  8. デバイスの電源をオフにしてからオンにします
  9. 削除されたフォルダ:$ cd /Users/john/Library/Developer/Xcode/DerivedData
  10. データベース生成を強制するためのsqlite名を変更しました
  11. devineから(再び)アプリケーションを削除しました

私は何時間も解決策を探していましたが、それでも見つかりません。

4

4 に答える 4

15

最後に、この問題の解決を2日間試みた後、ここで解決策を見つけました。

魔法の.xcdatamodeldフォルダー/パッケージを作成するにはどうすればよいですか?

他の開発者が開始したプロジェクトを終了しました。彼は最新の変更をリポジトリにプッシュしなかったようですが、それらの変更はデバイスのアプリにあり、アプリを削除すると正しい.xcdatamodeldファイルが削除されました。問題は、プロジェクトにファイルが1つしかないことでした。これが、空のフォルダーMyApp.xcdatamodelがある理由だったようです。momd

データモデルの正しい階層を作成するためのソリューションは非常に簡単でした。

  1. を選択MyApp.xcdatamodel
  2. [エディター]>[モデルバージョンの追加...]に移動します。

そして、これはMyApp.xcdatamodelファイルをに埋め込みましたMyApp.xcdatamodeld。これで、momdフォルダーにmomファイルが含まれ、アプリは正常に実行されます。現在の唯一の問題は、2つMyApp.xcdatamodelあり、1つは緑色のアイコンが選択されていますが、両方とも同じコンテンツであるため、問題はありません。

于 2012-09-27T14:14:06.273 に答える
2

私は最初のiOSアプリを再び構築するために支援しました。今日、私はこのエラーを受け取りました:「nilモデルでNSPersistentStoreCoordinatorを作成できません」。実際、それは簡単に修正できます。次のコード行を作成してください。

NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"[name]" withExtension:@"momd"];

入力した[名前]は、モデルファイル(.xcdatamodeld)と同じです。たとえば、TipRecord.xcdatamodeldを取得した場合、この行は次のようになります。

NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"TipRecord" withExtension:@"momd"];
于 2014-08-13T16:18:48.780 に答える
1
 NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"select xcdatamodeld" withExtension:@"momd"];

リソース名の正確なURLを選択します。

于 2012-10-03T13:44:33.470 に答える
0

比較的簡単です。

バージョンのないxcdatamodelファイルがある場合:managedObjectModel宣言で拡張子「mom」を使用します。xcdatamodelにバージョンがある場合は、「momd」を使用する必要があります。

于 2014-04-14T02:49:02.523 に答える