Базовые данные: ошибка, “не может объединить модели с двумя различными объектами, названными 'нечто'”

Я работаю над приложением для iPhone, которое использует Базовые Данные. Большинство раз я просто тестирую в средстве моделирования, но иногда качаю приложение вниз к iPad для проверки.

Я недавно изменил свою Базовую Модель данных, и теперь когда я отправляю приложение на iPad, я получаю исключение SIGABRT, говоря мне:

 Can't merge models with two different entities named 'foo'

Хорошо, то, что я понимаю. Старая версия базы данных существует на устройстве. Так, я (пробуют к) уничтожаю старую версию нажатием/содержанием значок приложения, пока это не начинает шевелиться, и затем коснитесь "X". IPad спрашивает меня, если я хочу удалить приложение и все его данные. Я говорю да.

Я восстанавливаю приложение, будучи нацелен на iPad, и получаю ту же ошибку.

Существует ли прием к тому, чтобы заставлять старую базу данных действительно уйти?

30
задан Christian Strempfer 1 October 2014 в 10:38
поделиться

4 ответа

Ваша ошибка сообщение не означает, что у вас есть две базы данных, т.е. постоянные хранилища. Это означает, что у вас есть два перекрывающихся файла модели (которые являются исходными файлами) в самом проекте Xcode. Удаление сборки нецелесообразно, потому что проект просто воссоздает ошибку при следующей сборке.

Файлы модели не могут перекрываться. Вам нужно убрать дублирование. Дублирование происходит из-за (1) наличия двух версий одного и того же файла или (2) наличия двух файлов модели с одним и тем же объектом в обоих.

Для (1) вам необходимо удалить старую копию. Файлы моделей имеют расширение имя_модели.xcdatamodel . Чтобы найти дубликат, откройте цель и проверьте под Compile Sources . Здесь будут перечислены все файлы моделей, включенные в цель. Удалите дубликат.

Для (2) вы можете иметь столько файлов модели, сколько хотите, но вы не можете иметь два файла модели с одним и тем же объектом в обоих. Иногда новички в Core Data пытаются связать файлы модели вместе, заставляя их совместно использовать одну или несколько сущностей. Если вы это сделали, вам нужно будет удалить повторяющийся объект из одной из моделей.

8
ответ дан 27 November 2019 в 23:04
поделиться

Постоянный магазин останется до тех пор, пока вы не удалите приложение с устройства, как в симуляторе. Если вы действительно хотите начать все сначала, удалите приложение с iPad, и он будет использовать новую модель.

Однако, как все уже отметили, это не та ошибка, которую вы получаете. Сделайте чистую сборку вашего приложения (то есть выберите Build -> Clean из меню в Xcode) и сделайте свежую сборку. Если ошибка все еще остается, значит в вашем проекте компилируется более одного файла xcdatamodel.

23
ответ дан 27 November 2019 в 23:04
поделиться

"Не удается объединить модели с двумя разными сущностями с именем 'foo'"

Это больше похоже на слияние двух моделей данных. Попробуйте полностью пересобрать ваше приложение. Проверьте, действительно ли в вашем проекте только одна модель данных.

Стек данных ядра по умолчанию загружает все модели данных в вашем пакете

managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles:nil] retain];   

Если присутствуют старые модели, все они объединяются.

2
ответ дан 27 November 2019 в 23:04
поделиться

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

Но если вы работаете в разработке и у вас нет установленных пользователей, вы можете стереть основную базу данных данных, зайдя в iTunes с подключенным устройством, удалив приложение со своего устройства и синхронизируя его. Затем перетащите новую версию вашего приложения в iTunes и выполните повторную синхронизацию. У вас должна получиться чистая модель.

0
ответ дан 27 November 2019 в 23:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: