Как вставить новый объект в объект и установить отношение этого объекта к существующему объекту другого объекта?

Мой вопрос может быть применен к любому типу отношений, но в моем случае у меня есть один к многим .

Допустим, у меня есть Entity Person, у которого есть 3 объекта:

Брайан

Питер

Скотт

И каждый человек может иметь много Джобса. Таким образом, у меня есть объект Job, который в настоящее время пуст. Обратные отношения для обоих объектов уже созданы, и они отлично работают. Просто, чтобы быть ясным, моя проблема заключается не в вставке объекта (я знаю, как это сделать), это особый способ вставки.

Поэтому более конкретный вопрос:

Как я могу вставить один или несколько объектов задания в объект задания и назначить каждый из них одному из объектов Person, которые в настоящее время существуют в Core Data?

Первый:

Создайте несколько заданий:

let job1 = NSEntityDescription.insertNewObjectForEntityForName("Job", inManagedObjectContext: managedObjectContext) as! Job ... 

Во-вторых:

Получите эту работу:

 // Request let moc = managedObjectContext let jobFetch = NSFetchRequest(entityName: "Job") // Filtring let jobTitle1 = "job1" jobFetch.predicate = NSPredicate(format: "jobTitle == %@", jobTitle) do { let fetchedJobs = try moc.executeFetchRequest(jobFetch) as! [Job] // JOBS } catch { fatalError("Failed to fetch jobs: \(error)") } 

В третьих:

Получатель:

 // Request let moc = managedObjectContext let personFetch = NSFetchRequest(entityName: "Person") // Filtring let firstName = "Person1" personFetch.predicate = NSPredicate(format: "firstname == %@", firstName) do { let fetchedJobs = try moc.executeFetchRequest(personFetch) as! [Person] // PERSONS } catch { fatalError("Failed to fetch persons: \(error)") } 

ЧЕТВЕРТЫЙ:

Задайте задание человеку:

 let person1 = (personFetch as! [Person])[0] let job1 = (fetchedJobs as! [Job])[0] person1.job = job1 

PS: закодировано, но не проверено

Пробовав много вещей, я наконец нашел решение. Спасибо Джимми, у которого есть идея о том, как подойти к этому. Ключ состоит в том, чтобы понять, что вы не можете назначить много одного, которое уже существует (или, по крайней мере, я не мог найти способ сделать это), но вы могли бы добавить много объектов в существующую. Другими словами, вы не можете назначить сущность для набора или наоборот.

SWIFT 3

Итак, первый шаг – это получить один объект (в данном случае Person), который вы хотите назначить многим (в этом случае Jobs). Это приведет вас туда:

  var person = try MOC.fetch(Person.fetchRequest()).filter { $0.name == "Brian" } 

Второй шаг – создать управляемый объект Jobs:

  let job = Jobs(context: MOC) job.title = "Computers" 

И Третий Шаг – добавить объект через Лицо, которое вы выбрали:

  person[0].addToJobs(job) 

Если вы хотите добавить более одного задания, вы можете создать цикл for и создать столько управляемых объектов, которые хотите, и добавлять их, когда они готовы к сохранению. например:

  for title in jobsTitles { let job = Jobs(context: MOC) job.title = title person[0].addToJobs(job) } 

Если вы используете CoreData, то ваши объекты генерируют класс. В этом сгенерированном классе вы увидите сгенерированные методы следующим образом:

 - (void)addJobsObject:(CDJob*)value; - (void)removeJobsObject:(CDAdvert*)value; - (void)addJobs:(NSSet*)values; 

Используйте их для установления отношений.