0

軽量の移行が機能するポイントを超えて、アプリのコア データ モデルを作り直しました。そのため、アプリ バンドルに 2 つのコア データ モデルがあり、それぞれに個別にアクセスする必要があります (通常のコア データのセットアップと手動移行の場合)。これは、[NSManagedObjectModel mergedModelFromBundles:nil]不適切または機能しないことを意味します。問題は、どちらのモデルにも URL を取得できないことです[NSManagedObjectModel alloc] initWithContentsOfURL:。これらは私が使用しているメソッドであり、どちらも NULL を返します。

- (NSURL *)currentModelURL{
    return [[NSBundle mainBundle] URLForResource:@"NewModel" withExtension:@"momd"];
}

- (NSURL *)oldModelURL{
    return [[NSBundle mainBundle] URLForResource:@"OldModel" withExtension:@"momd"];
}

実際、このメソッドを他のアプリで試してみると、モデルが 1 つのアプリであっても、モデルの URL が返されることはありません。私のアプリの以前のバージョンは、上記の方法を使用して URL を介してモデルを取得することで問題なく実行されたため、これは奇妙です... [NSManagedObjectModel mergedModelFromBundles].

私はこれこれを読み、提案された解決策を試しました。これには、モデルがリソースのリストに追加され、ビルド フェーズでバンドルにコピーされるようにすること、大文字と小文字を区別するファイル名を確認すること、およびURLForResourceメソッド内のファイル拡張子をいじることが含まれます。完全に新しいモデルを古いモデルの新しいバージョンとしてレンダリングし、永続ストア オプションで自動移行を単純に防止できると思いますが、私のアプローチはうまくいくはずです。アプリ バンドル内のモデルの URL を取得できなくなったのはなぜですか?

4

1 に答える 1