Я пытаюсь реализовать Generi c Crud Operations в Swift для Core Data. Это проблема, с которой я сталкиваюсь при создании данных. Мне удалось добиться некоторого успеха, но я не могу найти способ добавить отношения между сущностями в общем c способе.
Я новичок в Core Data, и я также искал ответ, но не смог найти любой. Пожалуйста, помогите мне, если я смотрю неправильно.
Мои объекты:
Пользователь и Фильмы, где Пользователь имеет отношение "один ко многим" с Фильмами.
Пользователь и фильмы
Текущая функция для достижения этого:
func createData<T>(forEntity entity: Entities, andObj objArr: [T]) {
guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else { return }
let managedContext = appDelegate.persistentContainer.viewContext
let entity = NSEntityDescription.entity(forEntityName: entity.rawValue, in: managedContext)!
for obj in objArr {
let mirror = Mirror(reflecting: obj)
let container = NSManagedObject(entity: entity, insertInto: managedContext)
for child in mirror.children {
var shouldSkip = false
for entityLocal in Entities.allCases {
if child.label!.lowercased() == entityLocal.rawValue.lowercased(){
shouldSkip = true
if let childArr = child.value as? [Any] {
createData(forEntity: entityLocal, andObj: childArr)
}
}
}
if !shouldSkip {
container.setValue(child.value, forKey: child.label!)
shouldSkip = false
}
}
do {
try managedContext.save()
}
catch let error as NSError {
print(error.localizedDescription)
}
}
}
Где Entities:
enum Entities: String, CaseIterable {
case User = "User"
case Movie = "Movies"
}
И я имитирую вызов api и вызов функции, например:
var movies = [MovieModel]()
var users = [UserModel]()
for _ in 1...3 {
let movie = MovieModel(title: "Man of Steel", rating: "9/10")
movies.append(movie)
}
let user = UserModel(username: "Khan", email: "khan@example.com", password: "12345", movies: movies)
users.append(user)
CoreDataManager.sharedManager.createData(forEntity: Entities.User, andObj: users)
My Core Data Movies Table:
Mov ie Скриншот таблицы
Проблема в том, что пользователи и фильмы сохраняются в их уважаемых таблицах, но я также хочу иметь идентификатор пользователя во внешнем ключе фильмов. Пожалуйста, направьте меня и дайте мне знать, если я смотрю на это неправильно. Большое спасибо за ваше время.