Я пытаюсь вставить NSManagedObject
через фоновый контекст и получаю эту ошибку:
Illegal attempt to establish a relationship 'location' between objects in different contexts (source = <Image: 0x600002f81b80> (entity: Image; id: 0x600000f44fe0 <x-coredata:///Image/t8C3934D6-DCD7-4A7B-A69C-9C18334F7A942> ; data: {
image = <ffd8ffe0 00104a46 49460001 01000048 00480000 ffe10058 45786966 00004d4d 002a0000 00080002 01120003 00000001 0001>;
location = nil;
}) , destination = <Location: 0x600002fb3020> (entity: Location; id: 0xd78dad45136e9365 <x-coredata://9CA497CF-69A8-44ED-8741-C75AF480446E/Location/p2> ; data: {
images = "<relationship fault: 0x600000f44480 'images'>";
location = "29.977646364835238,31.32489065578125";
}))
Я знаю, что этот вопрос задавался несколько раз, я проверил некоторые изответы, но я действительно не мог знать, чего не хватает в моем коде.Вот мой код:
func saveImagesToDb () {
//Store the image in the DB along with its location on the background thread
dataController.backgroundContext.perform {
let imageOnMainContext = Image (context: self.dataController.viewContext)
let imageManagedObjectId = imageOnMainContext.objectID
let imageOnBackgroundContext = self.dataController.backgroundContext.object(with: imageManagedObjectId) as! Image
for downloadedImage in self.downloadedImages {
let imageData = NSData (data: downloadedImage.jpegData(compressionQuality: 0.5)!)
imageOnBackgroundContext.image = imageData as Data
imageOnBackgroundContext.location = self.imagesLocation
try? self.dataController.backgroundContext.save ()
}
}
}
У меня просто есть два объекта: Местоположение и Изображение.Местоположение имеет атрибут с именем location, а Image имеет атрибут с именем image.Между ними существует отношение «один ко многим» (в одном месте может быть много изображений).
Я знаю, что каждый контекст сохраняет свою собственную копию NSManagedObjects
.Вот почему в коде я сначала получил изображение на основе контекста представления, получил его идентификатор, а затем использовал этот идентификатор для получения объекта изображения в фоновом контексте.
Что я делаю неправильно?
Я новичок в Core Data, поэтому буду признателен за любую помощь, которая может объяснить мне, что здесь происходит и как я могу ее решить.
Обновление : проблема была в imagesLocation
, который был построен на контексте представления, поэтому я просто создал соответствующий объект, используя его идентификатор в контексте фона.После этого проблема была решена, но у меня также была проблема с объектом Image и отношениями, как в моем вопросе здесь .Я мог решить это, и я отправил ответ, вы можете проверить это.