gpt4 book ai didi

objective-c - 孤立的核心数据对象没有被销毁

转载 作者:搜寻专家 更新时间:2023-10-30 19:41:21 27 4
gpt4 key购买 nike

我在 Core Data 中有一个 Recipe 对象,它可以保存一个 Photo 对象。后者包含图像的 NSData 属性和一些实用属性。

我在更改RecipePhoto 时遇到了麻烦:

recipe.photo = [Photo insertIntoContext: ctxt];

如果 recipe.photonil,则一切正常。但是,如果它有一个 Photo 的先前实例,那么那个实例就会变成“垃圾”,具有 nil 配方属性(与 photo 的反向关系),并在保存时导致异常(配方在我的模型中不是可选的)。

因此,我最终不得不做这样的事情:

if(!recipe.photo){
[ctxt deleteObject:recipe.photo);
}
recipe.photo = [Photo insertIntoContext: ctxt];

这看起来非常像手动内存管理,我必须确保正确删除“孤立的”Photo

一定有更好的方法。我做错了什么?

最佳答案

您的解决方案有效,您的方法也正确。 Core Data 不会自动删除悬挂的 child 。您将需要明确删除它。然而,“哪里”成了问题。

如果你真的总是想在添加像这样的新子对象之前删除现有的子对象,那么我会在集合访问器中的父对象的子类中处理它。这将允许您在执行删除之前检查是否相等等。这也将从您的(大概) View Controller 中删除此维护工作。

更新

OK, thanks. So I should create a custom setter with setPrimitiveValue & friends?

正确。您还需要准备好 KVO 方法(-willChangeValueForKey:-didChangeValueForKey:),以便您的访问器做正确的事情。

关于objective-c - 孤立的核心数据对象没有被销毁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22172362/

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