Как получить новый атрибут Core Data Entity, который будет отражен в NSManagedObject для этого объекта? - PullRequest
0 голосов
/ 29 февраля 2012

Я пытаюсь реализовать геттер на одном из моих классов БД.Но когда я выполняю следующую строку кода, где "obj" - это NSManagedObject:

return [obj valueForKey:@"activationData"];

, я получаю следующее исключение NSUnknownKeyException:

'[valueForUndefinedKey:]: объектный чертеж не являетсязначение ключа, совместимое с кодировкой для ключа "activData". '

Я только недавно добавил атрибут String с именем "activData" в свою сущность "Blueprint", используя Xcode.Но когда я запускаю приложение, NSManagedObject, представляющий сущности Blueprint, не включает новый атрибут «activData», который, очевидно, является причиной сбоя.

NSManagedObject выглядит следующим образом, но я ожидал, что он покажетновый атрибут вместе с атрибутами createDate, name и order:

<NSManagedObject: 0x5138c90> (entity: Blueprint; id: 0x513a2e0 <x-coredata://8C586BB8-B9E7-4FD7-84CB-5CE66FB221E6/Blueprint/p2> ; data: {
    createDate = "2012-02-21 15:49:00 +0000";
    name = "Feb 17 test";
    order = 2;
})

Fyi, ответ пользователя user1226119 (ниже) напомнил мне, что я использовал Organizer, чтобы извлечь базу данных sqlite из моего устройства и проверить ее с помощью SQLite Manager, чтобыпроверить вещи.Конечно же, в таблице Blueprint все еще нет нового поля activData.Таблица выглядит так же, как и всегда.

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

Ответы [ 2 ]

0 голосов
/ 01 марта 2012

Решением было обновить вызов метода pathForResource в коде, который возвращает NSManagedObjectModel.Я действительно создал новую версию базы данных xcdatamodel перед добавлением атрибута, но, очевидно, вы должны ссылаться на него, используя следующий код, который возвращает модель, которую будет использовать ваше приложение.

- (NSManagedObjectModel *)managedObjectModel {

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

    NSString *path = [[NSBundle mainBundle] pathForResource:@"MyDB Version5" ofType:@"mom" inDirectory:@"ASSIST.momd"];
    NSURL *momURL = [NSURL fileURLWithPath:path];
    managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:momURL];   

    return managedObjectModel;
}

У меня былопоместить имя новой версии базы данных («MyDB Version5») в качестве параметра pathForResource.Ранее это была "MyDB Version5".

0 голосов
/ 29 февраля 2012

Ваша модель не изменилась в вашем приложении. Вы должны удалить старое приложение и повторно развернуть его на своем устройстве.

...