1. ホーム
  2. ios

Core Data - パスで最適化されたモデルのロードに失敗した

2023-09-12 13:25:12

質問

iOS 9 beta 5 を搭載した iPhone 6 で Xcode 6 からアプリケーションを実行すると、コンソールにこれらのプリントが表示されます。

CoreDataです。パス '/var/mobile/Containers/Bundle/Application/0000000B-BDBC-0000-000B-0000FB00000B/Distribution.app/database.momd/database.omo' で最適化されたモデルのロードに失敗しました。

私はこれに関連する何かを見つけることができませんでした、誰かこのメッセージについていくつかの手がかりを持っていますか?

どのように解決するのですか?

この問題に遭遇したので、いくつか調べてみました。

私は Xcode 6.4 で構築していますが、以前のコア データは MyApp.ipa momd ディレクトリに .mom ファイルを生成しただけのように見えます。このスクリーンショットは、Xcode のいくつかのバージョンを見てきたプロジェクトからのものです。

すべての古いモデルのバージョンには、.mom ファイルしかないことに注意してください。今日、私は新しいモデル バージョンを作成しましたが、それには .mom と .omo ファイルの両方があります。

Xcode 6.4 (そしておそらくベータ 7.x バージョンの一部も) は、最適化されたバージョンのデータモデルを読み込む方法を知らないようです。

2015-10-16 11:11:42.563 MyAppName[1767:599635] CoreData: Failed to load optimized model at path '/var/mobile/Containers/Bundle/Application/D887D60B-FB28-4059-8167-F573460D98F8/MyAppName.app/MyDataModel.momd/MyDataModel3_0Analytics.omo'

という警告が6.4でコンパイルしたときに表示されます。しかし、Xcode の最新の app store バージョン (7.0.1) でアプリをコンパイルすると、この警告が表示されません。Mahesh のソリューションが機能している理由は、スキーマ全体を書き直すことで、アプリがアプリ バンドル内で探している .omo ファイルが作成されるからだと推測しています。

私の解決策は、core data で新しいデータ モデル バージョンを生成し、Xcode 7 でビルドすることでした。新しいモデル バージョンを作成することで、最適化されたモデル ファイルが作成されるようです。しかし、私のテストでは、このファイルが作成されても、Xcode 6.4 はまだエラーをスローします。私がXcode 7.0.1でそれを試してみるまで、警告は消えませんでした。

これは推測ですが、もしあなたが既存のプロジェクトを持っていて、新しいデータモデルのバージョンを作成せず、Xcode 7 でビルドした場合、.omo ファイルが見つからないため、警告を発しているのではと思います。しかし、データモデルをバージョンアップし、Xcode 6.4でビルドした場合、以前のXcodeバージョンでは最適化されたバージョンに対して正しく動作せず、たとえファイルがあっても読み込まれないようです。これらは私の観察に過ぎませんが。

私は、最適化されたモデル (.omo ファイル) があることを、次のようにしてロードすることを確認しました。 1. プロジェクトをアーカイブします。 2. .ipa の拡張子を .zip に変更します。 3. zip ファイルを展開します。 4. "payload"フォルダをクリックし、フォルダ内のアプリバンドル上で右クリック(またはcmdクリック)して "パッケージ内容を表示"を選択します。 5. .momdディレクトリをクリックすると、利用可能なすべてのマネージドオブジェクトモデルが表示されます。

.mom ファイルだけで、.omo ファイルがない場合、警告は完全に意味をなし、アプリは存在しないファイルを開くことができません。

私のテストでは、警告は情報提供のみのようでした。この警告が原因でクラッシュしたことは一度もありません。コア データは、最適化されたモデルを最初にロードしようとし、それが失敗した場合は通常の .momd モデルにフォールバックするようです。これは単なる私の推測に過ぎませんが。

ここにあるすべてが完全に正しいかどうかはわかりません。これは、この問題をデバッグしようとして、これまでに私が観察したことに過ぎません。他の誰かがもっと情報を提供できるのであれば、私はあなたの意見を歓迎します。