gpt4 book ai didi

cocoa - 从实体中删除托管对象

转载 作者:行者123 更新时间:2023-12-03 17:32:25 27 4
gpt4 key购买 nike

我有一个包含 2 个实体的 ManagedObjectContext,每个实体都包含多个条目。实体 A 的对象在 TableView 中表示,我希望用户能够删除实体 A 中的任何实体。我的问题是,当我发送删除该条目的请求时,调用了错误的实体!

仅供引用,我正在单独的方法中处理删除过程,因此当触发 TableView 中的删除按钮时,在将其从 View 中取出之前,我首先要确保它已从 ManagedObjectContext 中删除。

- (BOOL) deleteCompletedSuccessfully : (EntityA *) anEntry
{
[self.managedObjectContext deleteObject: anEntry];
NSError *error = nil;
If (![self.managedObjectContext save:&error])
{
NSLog (@”%@”, [error userInfo]);
return NO;
}
return YES;
}

错误是:Error Domain=NSCocoaErrorDomain Code=1570\"操作无法完成。(Cocoa 错误 1570.)…. 错误消息的其余部分表明我正在尝试删除一个 nil 对象在 EntityB 中!!!! 而 anEntry 实际上在 EntityA 中。

我尝试将输入(本例中为 anEntry)封装到一个数组中,即:

- (BOOL) deleteCompletedSuccessfully : (NSArray *) array
{
EntryA *anEntry = [array objectAtIndex: 0];
// and the rest of the code

同样的错误。我怎样才能让它在特定实体中查找特定条目?!

有什么帮助吗?

最佳答案

我认为实体和托管对象之间存在一些概念上的混淆。

实体是类似于类的抽象。托管对象是 NSManagedObject 或其子类之一的实际单个实例。数据模型中的实体告诉托管对象上下文,托管对象实例将具有哪些属性以及彼此之间的关系。

实体仅存在于数据模型中,而托管对象位于“对象图”中,“对象图”是内存中事件的相关对象的实际功能组。实体只是向托管对象上下文描述所有内容如何组合在一起,就像类定义告诉编译器如何将类中的所有属性和行为组合在一起一样。作为实例的托管对象具有与所有其他事件对象一样的数据和行为。

同样,托管对象上下文不会以任何方式添加、删除或设置实体的值。相反,它添加、删除或设置由其数据模型中的实体配置的托管对象的值。

所以,当你说:

I've got a managedObjectContext with 2 entities, each of which contains multiple entities.

你真正的意思是:

我有一个包含 2 个实体的数据模型和一个托管对象上下文,其中包含由这些实体配置的许多托管对象。

表格 View 可能仅显示配置到一个实体的实例中的数据(这是最常见的),但实际数据以及插入和删除发生在托管对象实例上,而不是在该点上不可更改的实体上。

但是,我不认为术语混淆是问题的实际原因。相反,我认为该错误试图告诉您,您正在从与使用实体 B 配置的对象的必需关系中删除由 EntityA 配置的对象。

cocoa 错误 1570 是 NSValidationMissingMandatoryPropertyError顾名思义,当您尝试保存具有 nil 值的必需属性的托管对象时,就会发生这种情况。管理对象上下文在保存之前尝试验证对象图,当它发现缺少必需的属性时,它会抛出该错误。

我无法告诉您更多信息,因为我不知道您的数据模型是什么样的。

关于cocoa - 从实体中删除托管对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6587483/

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