Nano Hash - криптовалюты, майнинг, программирование

Миграция области: переместить объект из одного объекта в другой объект

У меня есть три объекта:

class Customer: Object {
    dynamic var solution: Solution!;
    ...
}

class Solution: Object {
    dynamic var data: Data!;
    ...
}

class Data: Object {
    ...
}

Теперь мне нужно переместить объект Data из Solution в Customer, чтобы он стал:

class Customer: Object {
    dynamic var solution: Solution!;
    dynamic var data: Data!;
    ...
}

Я понятия не имею, как мне реализовать мой метод миграции области, чтобы все работало нормально и я не потерял данные.


Ответы:


1

Я провел несколько экспериментов с примером приложения миграции Realm и нашел следующее потенциальное решение:

В блоке миграции вы можете взаимодействовать с файлом Realm только через объект migration. Любые попытки прямого доступа к файлу Realm во время миграции приведут к исключению.

При этом возможны вложенные вызовы migration.enumerateObjects, ссылающиеся на разные классы объектов модели Realm. Таким образом, это должно быть просто вопросом первоначального перечисления объектов Customer и на каждой итерации перечисления объектов Solution, чтобы найти соответствующий объект с правильным значением data. После обнаружения должна быть возможность установить объект Customer с данными из объекта Solution.

Realm.Configuration.defaultConfiguration = Realm.Configuration(
    schemaVersion: 1,
    migrationBlock: { migration, oldSchemaVersion in
        if (oldSchemaVersion < 1) {
            migration.enumerateObjects(ofType: Customer.className()) { oldCustomerObject, newCustomerObject in
                migration.enumerateObjects(ofType: Solution.className()) { oldSolutionObject, newSolutionObject in
                    //Check that the solution object is the one referenced by the customer
                    guard oldCustomerObject["solution"].isEqual(oldSolutionObject) else { return }
                    //Copy the data
                    newCustomerObject["data"] = oldSolutionObject["data"]
                }
            }
        }
    }
})

Я чувствую, что должен подчеркнуть, что этот код ни в коем случае не тестировался и гарантированно работает в его нынешнем состоянии. Поэтому я рекомендую вам убедиться, что вы заранее тщательно протестировали его на некоторых фиктивных данных, которые вы не пропустите. :)

11.11.2016

2

Свифт 4, Царство 3

Мне пришлось перенести объект Realm, связанный с другим объектом. Я хотел удалить явную ссылку и заменить ее идентификатором объекта. Решение TiM помогло мне в этом, и его просто нужно было немного доработать.

   var config = Realm.Configuration()
   config.migrationBlock = { migration, oldSchemaVersion in
        if oldSchemaVersion < CURRENT_SCHEMA_VERSION {

            // enumerate the first object type
            migration.enumerateObjects(ofType: Message.className()) { (oldMsg, newMsg) in 

                // extract the linked object and cast from Any to DynamicObject
                if let msgAcct = oldMsg?["account"] as? DynamicObject {

                    // enumerate the 2nd object type
                    migration.enumerateObjects(ofType: Account.className()) { (oldAcct, newAcct) in
                        if let oldAcct = oldAcct {

                             // compare the extracted object to the enumerated object
                             if msgAcct.isEqual(oldAcct) {

                                // success!
                                newMsg?["accountId"] = oldAcct["accountId"]
                            }
                        }
                    }
                }
            }
        }
15.02.2018
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..