Ошибка с постоянным хранилищем CoreData

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

После нажатия кнопки я передаю ArrayController (Section1) в подкласс и анализирую его, чтобы сохранить значения ячеек TableView.

- (IBAction)saveSect1:(NSButton *)sender {

DataMiner *data = [[DataMiner alloc] init];
[data parseArrayController:Section1 tag:0];


}

-(void)parseArrayController:(NSArrayController *)myController tag:(NSInteger)arrayTag {

switch (arrayTag) {
    case 0:

        context = appDelegate().self.managedObjectContext;

        for (NSMutableDictionary *mydict in myController.arrangedObjects) {

            NSNumberFormatter *format = [[NSNumberFormatter alloc] init];
            NSNumber *code = [format numberFromString:[mydict objectForKey:@"diagCode"]];
            [format release];

            Section_1 *section = nil;

            section = [NSEntityDescription insertNewObjectForEntityForName:@"Section_1"   inManagedObjectContext:context];

            section.diagCode = code;
            section.diagDescr = [mydict objectForKey:@"diagDescr"];                            
            section.sectId = [NSNumber numberWithDouble:1];
            section.subSectId = [NSNumber numberWithDouble:1.1];

        }

        NSLog(@"%@", context.registeredObjects);

        [Section_1 release];

        break;

    default:
        break;
}

} Сначала все работало нормально, но теперь я получаю эту ошибку:

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

Кто-нибудь сталкивался с этой ошибкой раньше? Какие-либо предложения? Спасибо.

- (NSManagedObjectModel *)managedObjectModel
{
if (__managedObjectModel) {
    return __managedObjectModel;
}

NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"CoreData_test"        withExtension:@"momd"];
__managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
return __managedObjectModel;
}

person user1505130    schedule 13.07.2012    source источник
comment
Это одно из первых попаданий в Google по этой ошибке, которая, я думаю, хорошо ее объясняет. stackoverflow .com/questions/5572954/   -  person Jesse Rusak    schedule 14.07.2012


Ответы (1)


Модели ваших столов изменились. Вы можете либо удалить старую базу данных (удалить установленное приложение с устройства/симулятора). Измените путь в коде или выполните миграцию базы данных.

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

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

person Kibitz503    schedule 13.07.2012
comment
Я ценю ваше предложение, это для приложения на базе iOS или MacOx? Не могли бы вы объяснить TableModel, так как я работаю с несколькими классами ViewController, каждый из которых использует отдельный NSTableView. Я работаю с приложением MacOSX, и он использовал метод, который я добавил выше в AppDelegate. - person user1505130; 14.07.2012
comment
Табличная модель, вероятно, неправильный термин для использования... Где-то в вашем проекте есть файл xcdatamodel. Вы что-нибудь в нем меняли после того, как уже скомпилировали и запустили проект? Если это так, то существующая копия базы данных для этого проекта больше не совместима с вашим файлом. Вам нужно будет выполнить миграцию или удалить существующую установку. - person Kibitz503; 16.07.2012
comment
Большое спасибо, это сработало! - person user1505130; 23.07.2012
comment
Рад, что смог помочь :) Пожалуйста, проголосуйте за меня, когда сможете! - person Kibitz503; 23.07.2012