Отредактировано После приема Разъяснение
Alrighty. Поэтому, поскольку вы хотите предварительно заполнить areas
, когда вы добавите его в свою модель, в конце концов вам понадобится реализовать некоторую логику в вашем блоке миграции.
let migrationBlock: MigrationBlock = { migration, oldSchemaVersion in
migration.enumerate(Region.className()) { oldObject, newObject in
if oldSchemaVersion < 1 {
let areas = newObject?["areas"] as? List<MigrationObject
// Add new objects to 'areas' as needed
}
}
}
Там в some sample code, показывающий, как обрабатывать объекты списка в миграции в Realm коллекции образцов коды Свифта
Если ваша цель в добавлении region
свойства Area
поэтому вы можете выяснить, какой Region
объекта этого Area
является child of, то вам не нужно реализовывать это как свойство модели. Вместо этого вы можете использовать linkingObjects(_: forProperty:)
, чтобы заставить Realm работать от вашего имени.
class Area: Object {
dynamic var id = 0
dynamic var name = ""
var regions: [Region] {
return linkingObjects(Region.self, forProperty: "areas")
}
override static func primaryKey() -> String? {
return "id"
}
}
Чтобы подтвердить, что я сказал в комментариях, миграции являются односторонним путем. Они не могут быть понижены до предыдущих версий схемы. Если вы хотите быстро отладить процесс миграции в файле Realm, я рекомендую отложить исходный файл Realm и работать с копиями.
Оригинал ответа
ли вы на самом деле есть какие-либо данные, которые вы хотите добавить эти новые свойства? Поскольку это не похоже на то, что вам нужно, вам не нужно выполнять какой-либо код в блоке миграции.
Просто увеличьте номер версии схемы Realm и поставьте пустой блок миграции.
let config = Realm.Configuration(
schemaVersion: 1,
migrationBlock: { migration, oldSchemaVersion in
})
Realm.Configuration.defaultConfiguration = config
В то время как блок миграции не может быть нулевым, вам нужно всего лишь поместить код там, если есть какие-либо данные в старом файле Realm, который вы хотите управлять во время миграции (то есть, перемещая его в другое имущество). Если вы добавляете новые свойства, нет необходимости делать что-либо им внутри блока миграции.
Требуется некоторое время, чтобы проникнуть в мышление миграции Царства, но, к счастью, как только вы это сделаете, вы поймете, что они легче, чем вы думали. :)
(Отказ от ответственности: Я работаю в Realm, но я использую его в одном из своих приложений iOS для доставки, где я играл с несколькими миграциями на реальных пользовательских данных на этом этапе.:))
Я действительно Вот почему я спрашиваю: «Как мне отлаживать мою миграцию btw? Как если бы моя схема уже была версией 1, как мне вернуться к версии 0, чтобы проверить мою схему схемы 1» – Happiehappie
И вам не нужны блоки записи внутри миграция? @ _ @ – Happiehappie
Причина У меня на самом деле есть класс Outlet, который имеет как область, так и область, то, что я пытаюсь сделать, теперь связывает их обоих. – Happiehappie