Основная миграция данных с участием новой сущности и отношения ко многим - PullRequest
2 голосов
/ 05 апреля 2011

Я пытаюсь добавить новую сущность (скажем, B, с двумя «двойными» атрибутами) в мою базовую модель данных и создать необязательное отношение ко-многим с существующей сущностью (скажем, A). Я создал новую редакцию модели, которая включает в себя новую сущность B, существующую сущность A и отношение «ко-многим» A - >> B. Эта новая модель является моделью по умолчанию. Я создал модель отображения из v2 в v3 (миграция v1 -> v2 работает нормально, только изменения типа данных для объекта A), но не указал ни выражение значения для отношения A к B, ни выражение значения для атрибутов B.

Когда я запускаю приложение, я получаю следующую ошибку при попытке создать экземпляр модели управляемого объекта managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles:nil] retain];.

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSMutableArray insertObject:atIndex:]: attempt to insert nil object at 0'.

Проблема, вероятно, в том, что я не указал выражение значения для отношения A к B в модели отображения, но я подумал, что это необязательно, поскольку B является необязательным и его не существует в v2 модели. Если мне нужно указать выражение значения для отношения, как мне сделать это для несуществующего (как это не существует в v2 модели) необязательного отношения?

Любая помощь очень ценится.

PS - еще один вопрос - является ли модель сопоставления даже необходимой, или умная автоматическая миграция предназначена для обработки нового объекта и взаимосвязей?

1 Ответ

2 голосов
/ 24 мая 2011

Я только что решил эту проблему в своем собственном проекте. [NSManagedObjectModel mergedModelFromBundles: nil] не играет хорошо, когда у вас есть несколько версий вашей модели данных. Он пытается включить их все, и не должен.

Попробуйте использовать что-то вроде этого:

- (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;
}

Для глубокой проверки истории: http://iphonedevelopment.blogspot.com/2009/09/core-data-migration-problems.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...