Я добавляю новые свойства в модель, но некоторые ошибки 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.
и на этот раз блок миграции тоже не работал.
Кажется, я что-то упустил. Документы и ошибки не помогают понять, что происходит.