gpt4 book ai didi

ios - 使用背景上下文时无法在不同上下文中的对象之间建立关系

转载 作者:行者123 更新时间:2023-11-28 13:55:06 26 4
gpt4 key购买 nike

我试图通过后台上下文插入一个 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 有一个名为 location 的属性,Image 有一个名为 image 的属性。它们之间是一对多的关系(一个位置可以有很多图像)。

我知道每个上下文都保留了它自己的 NSManagedObjects 副本。这就是为什么在代码中我首先根据 View 上下文获取一个图像,获取它的 ID,然后使用该 ID 在背景上下文中获取一个图像对象。

我做错了什么?

我是 Core Data 的新手,所以我将不胜感激任何可以向我解释这里发生了什么以及我如何解决它的帮助。

更新:问题出在 imagesLocation 上,它是在 View 上下文中构建的,所以我只是使用它在背景上下文中的 ID 从中创建了一个相应的对象。在那之后,问题就解决了,但是我的问题here中也有图像对象和关系的问题。 .我可以解决这个问题,我发布了答案,你可以检查一下。

最佳答案

似乎 self.imagesLocation 是在外部线程上创建的 NSManagedObject,因此不能分配给 imageOnBackgroundContext

您应该使用 NSManagedObjectID 在您的 backgroundContext 中获取 self.imagesLocation 指向的对象,并将该获取的对象分配给您的 imageOnBackgroundContext

关于ios - 使用背景上下文时无法在不同上下文中的对象之间建立关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53987377/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com