Подтвердить что ты не робот

Persistentstorecoordinator sqlite код ошибки: 522 'не ошибка'

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

Я также попытался окружить оператор if в catch, и он возвращает код ошибки 522 sqlite.

Здесь что-то не так?

мой следующий код:

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator{
  if (__persistentStoreCoordinator != nil) {
    return __persistentStoreCoordinator;
  }
  NSURL *storeURL = [[self applicationDocumentsDirectory]     
  URLByAppendingPathComponent:@"coredatadb.sqlite"];
  NSError *error = nil;
  __persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];

  NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
  [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
  [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];

  if (![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error]){

      [[NSFileManager defaultManager] removeItemAtURL:storeURL error:nil];
      [__persistentStoreCoordinator release];
      __persistentStoreCoordinator = nil;
      return [self persistentStoreCoordinator];
  }

  return __persistentStoreCoordinator;
4b9b3361

Ответ 1

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

// Change journal mode from WAL to MEMORY
NSDictionary *pragmaOptions = [NSDictionary dictionaryWithObject:@"MEMORY" forKey:@"journal_mode"];

 NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
 [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
 [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, 
 pragmaOptions, NSSQLitePragmasOption, nil];

Ответ 2

Изменяя режим ведения журнала, вы избегаете этой проблемы, но не исправляете ее. Новый режим ведения журнала предоставляет вашему приложению некоторые преимущества, такие как скорость.

Реальная проблема заключается в том, что вы удаляете только один файл, а не все 3, которые используются в этом режиме. Там не только ваш coredatadb.sqlite, но также файл coredatadb.sqlite-shm и coredatadb.sqlite-wal. Что-то о схеме и переписывании или так, проверьте видео WWDC 2013 по основным данным для деталей.

Чтобы устранить проблему, вы должны удалить все файлы в каталоге "Документы", начинающиеся с "coredatadb.sqlite", и все снова и снова, -)

Обновление для iOS 9: теперь проще и безопаснее использовать destroyPersistentStoreAtURL или replacePersistentStoreAtURL. См. Сессию WWDC 2015 220_hd_whats_new_in_core_data.