Не могу решить: «Не могу объединить модели с двумя разными именами сущностей» - PullRequest
1 голос
/ 21 октября 2010

Я работаю с проектом Core Data в iOS 4.1 (с таргетингом на 3.1).Когда я добавляю версию модели данных, я получаю страшную ошибку «Не удается объединить модели с двумя различными объектами с именем xxx». Очистка целей не помогает. Удаление каталога сборки не помогает. Единственное, что решает проблему, это удалениеранее установленная версия приложения и установка fresh, что сводит на нет все цели управления версиями и переноса данных.

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

Я основал свой код Базовых Данных, ответ Гручала на этот текст ссылки и Джеффа Ламарша текст ссылки . При поиске и устранении неисправностей я пролил эти, а также другие подобные статьи в сети. Большинству людей с этой проблемой, похоже, повезло с «Очистить все цели». Но я поражаюсь.

Есть предложения?

Ответы [ 3 ]

2 голосов
/ 17 ноября 2010

Для тех, кто сталкивался с этим вопросом после попытки использовать облегченные миграции основных данных:

У меня была эта проблема даже после того, как я следовал инструкциям по созданию новой версии моей модели данных. Я заметил, что в моем приложении было два файла ".mom", один каталог ".mom" и один каталог ".momd", который содержал файлы ".mom"

Исходя из этого, я смог найти этот отличный пост , объясняющий проблему и предлагающий решение.

Ключ должен заменить реализацию - (NSManagedObjectModel *)managedObjectModel, созданную для вас, этой реализацией:

- (NSManagedObjectModel *)managedObjectModel {

    if (managedObjectModel != nil) {
        return managedObjectModel;
    }

    NSString *path = [[NSBundle mainBundle] pathForResource:@"Foo" ofType:@"momd"];
    NSURL *momURL = [NSURL fileURLWithPath:path];
    managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:momURL];

    return managedObjectModel; }

где 'Foo' - имя вашей модели данных.

Надеюсь, это кому-нибудь пригодится - я потратил слишком много часов, стуча головой об стену по этому поводу. Еще раз спасибо, Apple! :)

1 голос
/ 13 января 2012

Вот мое решение

((RootViewController *) [self.tabBarController.viewControllers objectAtIndex:0]).managedObjectContext = self.managedObjectContext;
((AlbumViewController *) [self.tabBarController.viewControllers objectAtIndex:1]).managedObjectContext = self.managedObjectContext;
((CameraViewController *) [self.tabBarController.viewControllers objectAtIndex:2]).managedObjectContext = self.managedObjectContext;
((VideoViewController *) [self.tabBarController.viewControllers objectAtIndex:3]).managedObjectContext = self.managedObjectContext;
0 голосов
/ 16 ноября 2010

Я обнаружил, что сторонняя библиотека, которую я использовал, создавала свое собственное хранилище данных CoreData и использовала метод "моделей слияния" или управление моделью данных. Я связался с продавцом и услужливо исправил ситуацию.

...