Как мне сохранить массив пользовательских объектов в основных данных? - PullRequest
0 голосов
/ 13 октября 2018

Базовые данные для меня все еще немного новы, поэтому я не совсем разбираюсь в плюсах и минусах.Я понимаю, как сохранить базовые данные, такие как Strings, Ints и т. Д. В базовых данных, но я не совсем понимаю, как сохранить массив пользовательских объектов в базовых данных или, если это вообще возможно.Исходя из моих исследований, в настоящее время я понимаю, что мне нужно установить для атрибута двоичные данные и установить для его идентификатора значение [упражнение] (создание фитнес-приложения).К сожалению, когда я пытаюсь передать свой массив в управляемый контекст, в моем коде появляется ошибка, которая гласит: «Не удается присвоить значение типа« [Упражнение] »для типа« Данные? »"

func save (completion: (_ finished: Bool) -> ()){
    guard let managedContext = appDelegate?.persistentContainer.viewContext else { return }
    let workout = Workout(context: managedContext)

    workout.nameOfWorkout = workoutNameField.text
    workout.exercises = exercises // error appears on this line, both "exercises" are arrays


}

Iугадайте мой вопрос: возможно ли то, что я пытаюсь сделать?Если да, то какие шаги я пропускаю?Я где-то читал, чтобы преобразовать массив в NSData и изменить его обратно, когда к нему нужно получить доступ, но меня беспокоит то, что, когда я пытаюсь изменить его обратно, он не будет работать, как запланировано.Извините за длинный вопрос, просто хочу убедиться, что я включил все детали, которые я могу придумать.

1 Ответ

0 голосов
/ 13 октября 2018

Для хранения пользовательских типов в CoreData самый быстрый способ:

  1. создание подкласса пользовательских типов (Exercise) из NSObject
  2. , устанавливающего тип атрибута вбазовая модель данных Transformable
  3. , для CustomClass [Exercise]

Итак, вы должны определить свой класс Exercise, подобный:

public class Exercise: NSObject {
  let name: String
  let duration: TimeInterval

  init(name: String, duration: TimeInterval) {
    self.name = name
    self.duration = duration
  }
}

Затем вы переходите к определению модели и задаете тип атрибута и поле CustomClass:

Пример модели CoreData

Теперь вы можете использовать свою функцию сохранения как:

func save (completion: (_ finished: Bool) -> ()){
  guard let managedContext = appDelegate?.persistentContainer.viewContext else { return }
  let workout = Workout(context: managedContext)

  workout.nameOfWorkout = workoutNameField.text
  workout.exercises = exercises

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...