Шаги по миграции баз данных Realm для отправленных приложений для iPhone

Каковы шаги для переноса изменений в Realm DB для уже загруженных обновленных приложений iOS?

Есть ли какой-либо предшествующий шаг, который нужно было выполнить перед отправкой приложения базы данных Realm.io?

Вот аналогичный вопрос в отношении основных данных Шаги по переносу баз данных Core Data для отправленных приложений iPhone, но я ищу миграционную базу данных Realm.

Здесь приводятся журналы сбоев:

*** Завершение приложения из-за неперехваченного исключения "RLMException", причина: "Требуется миграция для типа объекта" ExampleRealm "из-за следующие ошибки: - Значения свойств 'добавлены к последней объектной модели.'

+3
источник поделиться
1 ответ

Согласно документации по Realm, есть примеры того, как вы выполняете миграцию в Realm.

Из кода примера:

// define a migration block
// you can define this inline, but we will reuse this to migrate realm files from multiple versions
// to the most current version of our data model
RLMMigrationBlock migrationBlock = ^(RLMMigration *migration, uint64_t oldSchemaVersion) {
    if (oldSchemaVersion < 1) {
        [migration enumerateObjects:Person.className block:^(RLMObject *oldObject, RLMObject *newObject) {
            if (oldSchemaVersion < 1) {
                // combine name fields into a single field
                newObject[@"fullName"] = [NSString stringWithFormat:@"%@ %@", oldObject[@"firstName"], oldObject[@"lastName"]];
            }
        }];
    }
    if (oldSchemaVersion < 2) {
        [migration enumerateObjects:Person.className block:^(RLMObject *oldObject, RLMObject *newObject) {
            // give JP a dog
            if ([newObject[@"fullName"] isEqualToString:@"JP McDonald"]) {
                Pet *jpsDog = [[Pet alloc] initWithValue:@[@"Jimbo", @(AnimalTypeDog)]];
                [newObject[@"pets"] addObject:jpsDog];
            }
        }];
    }
    if (oldSchemaVersion < 3) {
        [migration enumerateObjects:Pet.className block:^(RLMObject *oldObject, RLMObject *newObject) {
            // convert type string to type enum if we have outdated Pet object
            if (oldObject && oldObject.objectSchema[@"type"].type == RLMPropertyTypeString) {
                newObject[@"type"] = @([Pet animalTypeForString:oldObject[@"type"]]);
            }
        }];
    }
    NSLog(@"Migration complete.");

Похоже, вы объявляете блок, в котором вы перечисляете объекты и вручную обновляете схему.

+3
источник

Посмотрите другие вопросы по меткам или Задайте вопрос