Ошибка миграции области: "Требуется миграция"
Я добавляю новые свойства в модель, но некоторые ошибки Realm меня сбивают с толку. Первым делом я попытался изменить свойство regDate (NSString) на тип NSDate.
RLMRealmConfiguration *config = [RLMRealmConfiguration defaultConfiguration];
config.schemaVersion = 2;
config.migrationBlock = ^(RLMMigration *migration, uint64_t oldSchemaVersion) {
NSLog(@"========== Migration executed ==========");
if (oldSchemaVersion < 2) {
[migration enumerateObjects:Track.className block:^(RLMObject *oldObject, RLMObject *newObject) {
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
newObject[@"regDate"] = [dateFormatter dateFromString:oldObject[@"regDate"]];
}];
}
};
[RLMRealmConfiguration setDefaultConfiguration:config];
[RLMRealm defaultRealm];
и я тоже изменился Track.h
,
@property NSString *regDate;
стал @property NSDate *regDate;
Но я получил ошибку во время выполнения, как это
*** Terminating app due to uncaught exception 'RLMException',
reason: 'Migration is required due to the following errors:
- Property 'Track.regDate' has been changed from 'string' to 'date'.
Причина говорит, что миграция необходима. Однако блок миграции никогда не выполнялся.
Я думал, что нет другого выбора, кроме как создать новое свойство из старого объекта и принять это бесполезное свойство regDate.
Поэтому я изменил миграцию блока:
config.migrationBlock = ^(RLMMigration *migration, uint64_t oldSchemaVersion) {
if (oldSchemaVersion < 2) {
// Note: Even if you don't have to convert placeholder values,
// you still have to provide at least an empty migration block
// when your schema has changes to nullability of properties.
[migration enumerateObjects:Track.className block:^(RLMObject *oldObject, RLMObject *newObject) {
NSLog(@"========== Migration executed ==========");
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
newObject[@"n_regDate"] = [dateFormatter dateFromString:oldObject[@"n_regDate"]];
}];
}
};
и добавил @property NSDate *n_regDate;
Ошибка была:
*** Terminating app due to uncaught exception 'RLMException', reason: 'Migration is required due to the following errors:
- Property 'Track.n_regDate' has been added.
и блок миграции не работал на этот раз.
Кажется, я что-то пропустил. Документы и ошибки не помогают понять, что происходит.
1 ответ
Я решил проблему, обновив Realm 3.1.1 до 3.5.0
Я не знаю, является ли это ошибкой. Однако, если кто-то использует версию 3.1.1, я рекомендую обновить.