Перенос объектов и родительских объектов

#objective-c #cocoa #core-data #core-data-migration

#objective-c #cocoa #ядро-данные #ядро-данные-миграция

Вопрос:

У меня есть объект A, который имеет два атрибута. Объект B имеет A в качестве родительского элемента и имеет дополнительные 3 атрибута. Изменения в новой версии не затрагивают объекты A и B.

Как я могу перенести объекты объекта B в новую версию моей модели данных, включая атрибуты из объекта A?

Я попытался использовать два сопоставления объектов: одно для A и одно для B, но «Атрибуты A» не были перенесены. В качестве альтернативы я бы добавил атрибуты A в сопоставление для переноса B, но там я не могу выбрать правильные атрибуты (в Xcode 4).


Редактировать:

Я имею в виду не обычную связь между двумя объектами, а наследование: Изображение, показывающее клиент и родительский объект


Правка 2:

Просто чтобы быть уверенным, я создал новый проект для тестирования. Здесь я добавил только два объекта, как показано выше. В моем awakeFromNib я выполняю запрос на выборку, и если результаты не возвращаются, я добавляю новый объект:

     NSManagedObject *newAccount = [[NSManagedObject alloc] initWithEntity:entityDesc insertIntoManagedObjectContext:[self managedObjectContext]];

    // Account
    [newAccount setValue:@"TheName" forKey:@"name"];
    [newAccount setValue:[NSDecimalNumber decimalNumberWithMantissa:5 exponent:2 isNegative:NO] forKey:@"currentBalance"];

    // BankDebitAccount
    [newAccount setValue:@"TheAccountNumber" forKey:@"accountNumber"];
    [newAccount setValue:@"TheBankName" forKey:@"bankName"];
    [newAccount setValue:[NSDecimalNumber decimalNumberWithMantissa:6 exponent:1 isNegative:YES] forKey:@"openingBalance"];
  

Во второй версии модели данных я добавил новый объект и включил автоматическую миграцию через

 NSMutableDictionary *dict = [NSMutableDictionary dictionary];
[dict setObject:[NSNumber numberWithBool:YES] forKey:NSMigratePersistentStoresAutomaticallyOption];

if (![__persistentStoreCoordinator addPersistentStoreWithType:NSXMLStoreType configuration:nil URL:url options:dict error:amp;error]) {
  

Миграция действительно происходит, и три свойства из BankDebitAccount успешно перенесены. Свойство currentBalance из Account сбрасывается в 0, а свойство name больше не отображается в XML-файле (и, следовательно, равно нулю).


Правка 3: Я только что попытался открыть этот недавно созданный тестовый проект в Xcode 3 (.2.4). Когда я открываю модель сопоставления там и выбираю сопоставление моего дочернего объекта, я действительно могу добавить сопоставление атрибутов для родительских атрибутов:

Отображение дочерних объектов в Xcode 3

Итак, я предполагаю, что это сделало бы это ошибкой в Xcode 4.

Ответ №1:

Я не уверен, что пошло не так.

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

введите описание изображения здесь

Затем я создал эту версию 2, никаких изменений в родительском и дочернем элементах, только один новый объект:

введите описание изображения здесь

Я создал модель сопоставления, и это то, что она предложила автоматически:

введите описание изображения здесь

Давайте посмотрим на различия:

введите описание изображения здесь

Только одно изменение: новый соседний объект.

Можете ли вы опубликовать несколько фотографий вашей ситуации?

Обратите внимание, что это XCode3

Ответ №2:

Оказывается, это была ошибка в версии Xcode, которую я использовал в то время, и была устранена в Xcode 4.2.