web-dev-qa-db-ja.com

iPhoneの「自動軽量移行」中に発生する「ソースストアのモデルが見つかりません」?

私はiPhoneアプリケーションのv1からv2へのアップグレードテストで本当に立ち往生しています。 iTunes経由でiPhoneデバイスにアドホック配布してテストしているIPAリリースがあります。1つはアプリのv1用で、もう1つはv2用です。ご了承ください:

  • v1のインストールは私のデバイスで正常に実行されます
  • v1を削除してv2をデプロイすると(移行なし)、正常に機能します
  • v1がすでに存在しているときにv2をデプロイすると、「reason =ソースストアのモデルが見つかりません」というエラーが表示されます。

エラーからの抜粋... *

reason=**Can't find model for source store**}, {
         URL = "file://localhost/var/mobile/Applications/AAAAF424-D6ED-40FE-AB8D-66879386739D/Documents/MyApp.sqlite";
         metadata =     {
             NSPersistenceFrameworkVersion = 320;
             <cut>
  • 「電話ディスク」を使用してデバイスを見ると、Documents /MyApp.sqliteファイルがあることがわかります

質問-これを解決する方法はありますか?ここでどのようなデバッグ/分析を行うことができますか?さらに情報が必要な場合はお知らせください。

概要として私が行ったことは次のとおりです。

  • コアデータモデルのバージョンを設定せずにv1アプリをAppStoreにデプロイしました(つまり、バージョンの時点で実際には認識していなかったため、設定しませんでした)
  • V2の唯一の追加の変更は、1つのモデルの1つの新しい属性でした
  • したがって、v2リリースの場合、私が行ったことは次のとおりです。
  • 新しいコアデータモデルを再作成しました
  • モデルのv1バージョンを作成しました
  • V1のオブジェクト/属性を作成しました
  • 保存しました
  • モデルのv2バージョンを作成しました
  • 1つの追加属性を作成しました
  • 保存しました
  • 管理対象オブジェクトクラスを再作成しました
  • コードを更新して、オプションを次のように配置しました http://developer.Apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreDataVersioning/Articles/vmLightweight.html#//Apple_ref/doc/uid/ TP40008426-SW1 addPersistentStoreWithTypeを呼び出すとき

これが役立つ場合は、PSのより完全なバージョンのエラー-今回は、シミュレーターでの移行エラーのシミュレーションによるものです

, reason=Can't find model for source store}, {
    URL = "file://localhost/Users/greg/Library/Application%20Support/iPhone%20Simulator/4.3.2/Applications/69FDFDCF-631D-4191-B852-CD75151B1EA9/Documents/MyApp.sqlite";
    metadata =     {
        NSPersistenceFrameworkVersion = 320;
        NSStoreModelVersionHashes =         {
            Config = <5f92f988 71e11a66 554ae924 61887562 22b8de8a c318b110 e3e4a569 81adafa2>;
        };
        NSStoreModelVersionHashesVersion = 3;
        NSStoreModelVersionIdentifiers =         (
            ""
        );
        NSStoreType = SQLite;
        NSStoreUUID = "3B9832DA-E3A1-431B-83E8-43431A7F3452";
    };
    reason = "Can't find model for source store";
}

PSS。これがコアデータモデルの内容に役立つ場合、各バージョンの* .momディレクトリ/パッケージは次のとおりです:

v1

-rw-r--r--   1 greg  staff  1664  5 Sep 21:06 MyApp.mom
-rw-r--r--   1 greg  staff  2656  5 Sep 21:06 MyApp.omo
-rw-r--r--   1 greg  staff   480  5 Sep 21:06 VersionInfo.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.Apple.com/DTDs/PropertyList-1.0.dtd>">
  <plist version="1.0">
    <dict>
      <key>NSManagedObjectModel_CurrentVersionName</key>
      <string>MyApp</string>
      <key>NSManagedObjectModel_VersionHashes</key>
      <dict>
        <key>MyApp</key>
        <dict>
          <key>Config</key>
          <data>
            X5L5iHHhGmZVSukkYYh1YiK43orDGLEQ4+SlaYGtr6I=
          </data>
        </dict></dict></dict>
      </plist>

v2

-rw-r--r--  1 greg  staff   497  2 Oct 12:47 MyApp 1.mom
-rw-r--r--  1 greg  staff  1601  2 Oct 12:47 MyApp 2.mom
-rw-r--r--  1 greg  staff  1695  2 Oct 12:47 MyApp.mom
-rw-r--r--  1 greg  staff  2920  2 Oct 12:47 MyApp.omo
-rw-r--r--  1 greg  staff   665  2 Oct 12:47 VersionInfo.plist

<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.Apple.com/DTDs/PropertyList-1.0.dtd>">
  <plist version="1.0">
    <dict>
      <key>NSManagedObjectModel_CurrentVersionName</key>
      <string>MyApp</string>
      <key>NSManagedObjectModel_VersionHashes</key>
      <dict>
        <key>MyApp</key>
        <dict>
          <key>Config</key>
          <data>
            Z/n8092QBHPfBwInZvIm1lei53T1UtZhpNzjl3JA0gs=
          </data>
        </dict>
        <key>MyApp 1</key>
        <dict/>
        <key>MyApp 2</key>
        <dict>
          <key>Config</key>
          <data>
            Fih24clI+kZszFd3X6Gm8itq8YDxudiKnjHW8ydNmps=
          </data>
        </dict></dict></dict>
      </plist>

編集:以下に提供されているリンクjrturtonを確認することによって提起された、私には明確ではない別の質問は次のとおりです。

  1. 最新のXCodeバージョンでは、「現在のバージョンを設定」を適切なモデルバージョンファイルにどのように設定しますか?つまり、以前の投稿では、モデルバージョンの追加と個別の「現在のバージョンの設定」という2つの異なる手順を取り上げています。
  2. コアデータモデルファイルごとに設定できるコアデータモデルの「識別子」フィールドをどのように使用することになっていますか。それは検査官にあります。パラメータは、たとえばMyApp 1.xcdatamodel、MyApp 2.xcdatamodel、およびMyApp.xcdatamodelファイルに対して存在するので、ここでそれぞれに何を入力する必要がありますか?
20
Greg

Xcdatamodeldファイルが選択されている場合は、ユーティリティインスペクター(右側のペイン)の[IDとタイプ]タブでデータモデルのバージョンを設定します。これには、「コアデータモデル」と呼ばれるセクションと「識別子」と呼ばれるフィールドがあります。

Xcdatamodeldファイルを選択し、[エディター]-> [モデルバージョンの追加]に移動して、新しいモデルバージョンを追加します。

この時点で、前のモデルのベースにするように求められます。

このプロセスを実行せずに新しいモデルを追加した場合、軽量移行が機能しない可能性があります。

37
jrturton

これを引き起こす可能性のある別のことは、次の場合です。

  1. バージョン2を作成
  2. その後、誤ってバージョン1を編集します
  3. 次に、バージョン2をデフォルトにします
  4. あなたの変化がそこにないことに気づきなさい
  5. バージョン2で再度変更を加えます

マージしようとしているバージョン1は、ストアを作成したバージョンではないため、同じ効果が得られます。

3
Grady Player

モデルに変更を加え、モデルオブジェクトを生成し、移行を気にせず、新しいバージョンの作成に関心がないことを確認した場合は、[製品]-> [クリーン]を実行するだけで、通常はこれが修正されます。問題。

それでもこのエラーが発生する場合は、sqliteDBを見つけて削除してください。アプリを再度起動すると、新しいモデルから構築された新しいアプリが作成されます。

または、シミュレーターからアプリを削除するか、他のすべてが失敗した場合は、シミュレーターの上部にある[iOS設定]をタップして[コンテンツと設定をリセット...]を選択すると、シミュレーターがすばやくワイプされて開始できます新鮮な。

1
Travis M.

Xcode 8、移行せずにこの問題が発生しました

ソースストアのモデルが見つかりません

私がしたことは単に

Simulator > Reset Content and Settings
0
Ted