#ios #swift #realm
Вопрос:
Я создаю файл области по умолчанию, чтобы использовать его при первом запуске приложения в качестве замены (я хочу иметь файл с исходными данными). Я начинаю с создания файла области по умолчанию из csv-файлов. Проблема в том, что я не уверен, правильна ли моя структура. Когда я импортирую данные из csv (в браузере области) и пытаюсь импортировать следующие данные для следующего класса, я получаю эту ошибку
У меня есть основное занятие под названием Упражнения
class Exercises: Object { @Persisted var id: Int = 0 @Persisted var name: String = "" @Persisted var category: Category? @Persisted var equipment: Equipment? @Persisted var instruction: String @Persisted var muscle: Listlt;Musclegt; @Persisted var gif: String? @Persisted var image: String? convenience init(id: Int, name: String, category: Category?, equipment: Equipment?, instruction: String, muscle: [Muscle], gif: String?, image: String?) { self.init() self.id = id self.name = name self.category = category self.equipment = equipment self.instruction = instruction self.muscle.append(objectsIn: muscle) self.gif = gif self.image = image } }
и другие классы для отдельных вещей
class Equipment: Object { @Persisted(primaryKey: true) var equipmentID = 0 @Persisted var equipment: String = "" convenience init(equipment: String) { self.init() self.equipment = equipment } } class Category: Object { @Persisted(primaryKey: true) var categoryID = 0 @Persisted var category: String = "" convenience init(category: String) { self.init() self.category = category } } class Muscle: Object { @Persisted(primaryKey: true) var muscleID = 0 @Persisted var muscle: String = "" convenience init(muscle: String) { self.init() self.muscle = muscle } }
Наконец, я хочу получить структуру, как показано ниже. Интересно, правильно ли это? Может быть, лучший вариант-просто установить текст в полях вместо ссылки на класс (в конце концов, область нереляционная)?
Комментарии:
1. Вопрос: вы хотите, чтобы у объекта был первичный ключ?
@Persisted var id: Int = 0
? Во-вторых, это ошибка, которую вы получаете при импорте данных, ссылающихся на класс категории. Похоже, что в плоском файле, который вы импортируете, есть дубликат первичного ключа1
, и первичные ключи должны быть уникальными. Я бы проверил этот файл. Пожалуйста, задавайте вопросы по одному на каждый, но скриншот, который вы включили, напрямую не соотносится с объектами (кодом) в вопросе как таковом. Другими словами, мы не знаем, что представляет собой этот снимок экрана, другой объект? О, Сфера обладает реляционными возможностями (является реляционной)2. Я хочу, чтобы у всех классов области был первичный ключ (первичный ключ для основного класса, называемого упражнениями, и других, таких как оборудование, категория и мышцы), потому что это облегчает поиск. Правильно ли это?
3. Нет, это не облегчает поиск как таковой — фильтрация есть фильтрация. Однако с объектами с первичными ключами проще работать и они более эффективны; вы можете напрямую обновлять определенный объект или читать в определенном объекте по его первичному ключу без необходимости фильтрации . поэтому… вам нужно будет обновить модель упражнений, чтобы добавить первичный ключ, а затем вернуться к вашей проблеме. Первичные ключи должны быть уникальными, поэтому вероятной причиной вашей проблемы является то, что двум объектам категории присвоен первичный ключ «1».