Подтвердить что ты не робот

"Не удается найти модель для хранилища источников", возникающую во время "автоматической легкой миграции" iphone?

Я действительно застрял здесь с тестированием обновлений от v1 до v2 приложения iPhone. У меня есть выпуски IPA, которые я тестирую через ad hoc-дистрибуцию через iTunes на свое iPhone-устройство, одно для v1 приложения и другое для v2. Обратите внимание:

  • Установки v1 отлично работают на моем устройстве.
  • если я удалю v1 и развожу v2 (так что нет миграции), тогда он отлично работает
  • когда я развертываю v2, пока v1 уже существует, я получаю сообщение об ошибке: "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>
  • когда я использую "телефонный диск" для просмотра своего устройства, я вижу, что есть документы/файл MyApp.sqlite.

Вопрос - Есть идеи, как это решить? Какую отладку/анализ можно было бы здесь сделать? Дайте мне знать, если вам нужна дополнительная информация.

Что я сделал в качестве обзора:

  • Развернуто мое приложение v1 в AppStore, не настроив версию для моей основной модели данных (т.е. на самом деле не было известно во время версий, поэтому не установил ее)
  • Единственное дополнительное изменение для v2 - это один новый атрибут для одной модели.
  • Итак, для версии v2 я сделал следующее:
  • Создана новая модель базовых данных
  • Создал версию v1 для модели
  • Создал объект/атрибуты для v1
  • Сохраненный
  • Создал версию v2 для модели
  • Создал один дополнительный атрибут
  • Сохраненный
  • Воссоздал классы управляемых объектов
  • Обновлен код для добавления опций в 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 directory/package для каждой версии архива:

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>

EDIT: Еще один вопрос, который мне неясен, как поднято путем обзора ссылки jrturton, представленной ниже, является:

  • Как теперь в последней версии XCode установить "Установить текущую версию" в соответствующий файл модели модели? то есть в предыдущих сообщениях выделяются два разных этапа: одно добавление версии модели, но затем отдельно "Установить текущую версию"
  • Как предполагается использовать поле "идентификатор" базовой модели данных, которое можно установить для каждого из файлов модели основных данных. Это у инспектора. Этот параметр существует, например, для файлов MyApp 1.xcdatamodel, MyApp 2.xcdatamodel и MyApp.xcdatamodel, поэтому что вам нужно вставить здесь?
4b9b3361

Ответ 1

Вы устанавливаете версию своей модели данных в инспекторе Утилиты (правая панель) на вкладке "Идентификация и тип" при выборе файла xcdatamodeld. У этого раздела есть раздел "Основная модель данных" и поле "Идентификатор".

Вы добавляете новую версию модели, выбирая файл xcdatamodeld, выбрав Редактор → Добавить версию модели.

В этот момент он предлагает вам использовать предыдущую модель.

Если вы добавили новую модель, не пройдя этот процесс, облегченная миграция может не сработать.

Ответ 2

Другая вещь, которая может вызвать это, - это если вы:

  • сделать версию 2
  • затем отредактируйте версию 1 случайно
  • затем сделайте версию 2 по умолчанию
  • осознать, что ваше изменение не существует
  • сделайте свое изменение снова на версии 2

вы получаете тот же эффект, потому что версия 1, которую вы пытаетесь объединить, не является версией, создавшей хранилище.

Ответ 3

Если вы внесли изменения в свою модель и убедитесь, что вы создали объект модели и не заботитесь о миграции и не заинтересованы в создании новой версии, вам просто нужно сделать Product → Clean, и это будет обычно исправляйте эту проблему.

Если у вас все еще есть эта ошибка, найдите свою базу данных sqlite и удалите ее. Когда вы снова запустите приложение, оно создаст новый, созданный из новой модели.

В качестве альтернативы вы можете удалить приложение из симулятора или, если все остальное не удается, коснитесь "Настройки iOS" в верхней части симулятора и выберите "Reset Содержание и настройки...", и он быстро уничтожит симулятор, чтобы вы могли начать новый.

Ответ 4

Xcode 8, у меня была эта проблема без миграции

Не удается найти модель для хранилища источников

что я сделал, просто

Simulator > Reset Content and Settings