Я использую «обычную» библиотеку в своем проекте iOS. Эта библиотека создает базу данных Realm. Пока что я использую эту библиотеку только в проектах iOS. Теперь я хочу использовать ту же библиотеку с проектом macOS. Он основан на Foundation
и не использует UIKit
, так почему бы и нет?
Вот проблема: у меня есть класс Realm с именем Collection
Collection
- это также название стандартного протокола Swift.
Хотя мне удалось избежать столкновения имен в моем проекте iOS, по какой-то причине я не могу сделать то же самое в моем проекте MacOS - он создает коллекцию имен.
Я читал об этой нотации, которую можно использовать так:
@objc(SpecialCollection)
class Collection: Realm.Object {
let items: List<ItemObject>
let name: String
let url: String
....
}
Итак, это решает проблему конфликта имен. В ObjC имя будет другим, но в Swift мне ничего менять не нужно.
Это все хорошо, за исключением моей локальной базы данных Realm. У меня много Collection
объектов, которые следует переименовать в SpecialCollection
(поскольку Realm использует ObjC под Swift). Я хотел бы выполнить миграцию для этого, но, по-видимому, еще нет поддерживаемого способа сделать это? Я заметил на github тикеты о том, что за этой проблемой «наблюдают», но, к сожалению, до сих пор не существует опубликованного решения для решения этой проблемы.
Все мои Collection
объекты содержат List
объектов (отсюда и название). Итак, я попытался выполнить перечисление всех Collection
объектов в миграции ... Я бы просто взял старый объект и создал новый объект с новым именем, например:
migration.enumerateObjects(ofType: "Collection", { (oldObject, _) in
migration.create("SpecialCollection", value: oldObject)
}
Но поскольку у oldObject
есть список других объектов, миграция Realm попытается создать все элементы в любых List
объектах ... что невозможно, потому что он создает объекты с тем же значением primaryKey
(вызывая сбой).
Итак, я не могу сохранить старое имя (Коллекция), и я не могу преобразовать в новое имя, и я не могу просто удалить данные пользователя. Итак, я действительно в тупике.
Цитата
Я пытался изменить oldObject
перед созданием нового объекта, но вы не можете изменить oldObject
при миграции.
Единственное правило состоит в том, что старые данные должны быть сохранены, я не могу просто уничтожить область пользователя здесь.
Спасибо за любую помощь в этом. Это очень ценится.