снова ошибка какао 134100 - (Модель, используемая для открытия, несовместима с моделью, использованной для создания ...) - PullRequest
4 голосов
/ 03 августа 2011

Я видел этот вопрос, опубликованный здесь, но всегда ответ таков: модель была изменена, перезагрузите симулятор, удалите магазин.

Я также получаю эту ошибку, однако это новое приложение. Я не добавил / изменил объекты или атрибуты.

Я удалил магазин, сбросил симулятор, но получил те же результаты.

Вот код магазина. Есть ли другие причины этой проблемы?

- (NSManagedObjectModel *)managedObjectModel {
   //  NSLog(@"%s", __FUNCTION__);
    if (managedObjectModel_ != nil) {
        return managedObjectModel_;
    }

    NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"Lexicon" ofType:@"momd"];
    NSURL *modelURL = [NSURL fileURLWithPath:modelPath];
    managedObjectModel_ = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];    
    return managedObjectModel_;
}

/**
 Returns the persistent store coordinator for the application.
 If the coordinator doesn't already exist, it is created and the application's store added to it.
 */
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {

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

    NSURL *storeURL = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"dict.sqlite"]];

    NSError *error = nil;
    persistentStoreCoordinator_ = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
    if (![persistentStoreCoordinator_ addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) {

        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
    }    

    return persistentStoreCoordinator_;
}

Вот консул извергается:

2011-08-03 11: 42: 38.936 Лексикон [4468: f203] - [AppDelegate application: didFinishLaunchingWithOptions:] 2011-08-03 11: 42: 38.989 Лексикон [4468: f203] - [AppDelegate applicationDocumentsDirectory] 2011-08-03 11: 42: 39.048 Lexicon [4468: f203] Неразрешенная ошибка Ошибка Domain = NSCocoaErrorDomain Code = 134100 "Операция не может быть завершено. (Ошибка какао 134100.) "UserInfo = 0x6d3ee60 {metadata = {type = неизменяемый dict, количество = 7, записи => 2: {содержание = "NSStoreModelVersionIdentifiers"} = {тип = неизменяемый, число = 1, значения = (0: {длина = 0, емкость = 0, байты = 0x})} 4: {содержание = "NSPersistenceFrameworkVersion"} = {value = +363, type = kCFNumberSInt64Type} 6: {contents = "NSStoreModelVersionHashes"} = {type = неизменный dict, count = 1, записи => 0: {содержание = "LexiconEntity"} = {length = 32, емкость = 32, байты = 0x8698c5295fa5124b78a6b127bba26ff0 ... 70eaece0517cd4c6}}

7: {contents = "NSStoreUUID"} = {содержание = "86B22D58-28A5-4585-8650-07111B34B43A"} 8: {contents = "NSStoreType"} = {contents = "SQLite"} 9: {contents = "_NSAutoVacuumLevel"} = {contents = "2"} 10: {contents = "NSStoreModelVersionHashesVersion"} = {значение = +3, тип = kCFNumberSInt32Type}}, reason = Модель, используемая для открытия магазина: несовместим с тем, который использовался для создания магазина}, { метаданные = { NSPersistenceFrameworkVersion = 363; NSStoreModelVersionHashes = { LexiconEntity = <8698c529 5fa5124b 78a6b127 bba26ff0 f3bc678b a4f1e809 70eaece0 517cd4c6>; }; NSStoreModelVersionHashesVersion = 3; NSStoreModelVersionIdentifiers = ( <> ); NSStoreType = SQLite; NSStoreUUID = "86B22D58-28A5-4585-8650-07111B34B43A"; "_NSAutoVacuumLevel" = 2; }; reason = "Модель, используемая для открытия магазина, несовместима с тот, который использовался для создания магазина ";}

1 Ответ

2 голосов
/ 04 августа 2011

Оказывается, хранилище БД sqlite построено неправильно.Таким образом, в данном случае сообщение было довольно точным.

Вышеуказанная проблема была реальной.База данных не отражала модель.

Решение состоит в том, чтобы позволить Core Data создать пустую базу данных из модели, а затем Core Data импортировать сами данные.

Сначала я экспортировал свойБаза данных sqlite в sql вызывает файл db.sql (образно!).Я экспортировал только таблицу данных и таблицу первичного ключа, а не таблицу метаданных.Я использовал приложение под названием SQLiteManager для этого.Вы также можете сделать это в командной строке.

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

Этот код выглядит следующим образом:

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {

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


    NSString *storePath = [[self applicationDocumentsDirectory] stringByAppendingPathComponent:@"db.sql"];

    // set up the backing store
    NSFileManager *fileManager = [NSFileManager defaultManager];
    // If the expected store doesn't exist, copy the default store.
    if (![fileManager fileExistsAtPath:storePath]) {
        NSString *defaultStorePath = [[NSBundle mainBundle] pathForResource:@"dict" ofType:@"sqlite"];
        if (defaultStorePath) {
            [fileManager copyItemAtPath:defaultStorePath toPath:storePath error:NULL];
        }
    }

    NSURL *storeURL = [NSURL fileURLWithPath:storePath];

    NSError *error = nil;
    persistentStoreCoordinator_ = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
    if (![persistentStoreCoordinator_ addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) {

        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
    }    

    return persistentStoreCoordinator_;
}

Надеюсь, это поможет .. Кажется, у меня работает ..

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