Изчистване на база данни, когато е необходима област за мигриране

Има начин Android да постигне това, но аз все още съм озадачен относно подхода на iOS. Не искам да правя миграция всеки път, когато имам нова актуализация, така че предпочитам clear db да започна отначало, ако е така.

Намерих този въпрос свързан с това

Мога ли да използвам този код само за миграция?

// Notice setSchemaVersion is set to 1, this is always set manually. It must be
// higher than the previous version (oldSchemaVersion) or an RLMException is thrown
[RLMRealm setSchemaVersion:1
        forRealmAtPath:[RLMRealm defaultRealmPath]
    withMigrationBlock:^(RLMMigration *migration, uint64_t oldSchemaVersion) {
   // We haven’t migrated anything yet, so oldSchemaVersion == 0
    if (oldSchemaVersion < 1) {
    // Nothing to do!
    // Realm will automatically detect new properties and removed properties
    // And will update the schema on disk automatically
  }
}];

person shoujo_sm    schedule 02.08.2015    source източник
comment
Тази заявка за функция се проследява на github.com/realm/realm-cocoa/issues/1692.   -  person segiddins    schedule 02.08.2015


Отговори (1)


Да, можете да използвате това само за миграция. От официалните документи:

Вие дефинирате миграция и свързаната версия на схема чрез извикване на +[RLMRealm setSchemaVersion:forRealmAtPath:withMigrationBlock:]. Вашият блок за миграция предоставя цялата логика за преобразуване на модели на данни от предишни схеми към новата схема. След извикване на +[RLMRealm setSchemaVersion:forRealmAtPath:withMigrationBlock:], всички области, които изискват миграция, автоматично ще приложат предоставения блок за миграция и ще бъдат актуализирани до предоставената версия.

Прочетете повече за миграциите

Можете обаче да опитате да изтриете област и вместо това да създадете нова област в нов път. Така че ще запазите номер на версия в UserDefaults и ще актуализирате този номер всеки път, когато вашият модел на данни се промени. Не знам обаче дали това работи. От документите:

Можете също да зададете персонализиран път за областта по подразбиране, като използвате +[RLMRealm setDefaultRealmPath:]. Това е особено полезно, когато тествате приложението си или когато споделяте области между приложения в споделен контейнер на iOS 8.

Прочетете повече за Realm

person ezcoding    schedule 02.08.2015