Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 核心数据-打破关系_Iphone_Objective C_Xcode_Core Data_Entity Relationship - Fatal编程技术网

Iphone 核心数据-打破关系

Iphone 核心数据-打破关系,iphone,objective-c,xcode,core-data,entity-relationship,Iphone,Objective C,Xcode,Core Data,Entity Relationship,我有一个患者实体和一个列表实体。一个患者可以属于多个不同的列表,一个列表可以有多个不同的患者 假设我有一个患者属于3个列表(a、B、C)。我想从列表A和B中删除患者。显然,我不想删除列表A和B本身。我该怎么做呢?所以为了建立这种关系的模型,在患者和列表之间有一种多对多的关系。假设在核心数据中,这是由列表上的患者关系表示的,与之相反的列表患者关系。此外,让我们假设列表有一些属性name,其名称为NSString 为了“打破”关系(从某些列表中删除患者),您必须对要删除的患者NSManagedObj

我有一个患者实体和一个列表实体。一个患者可以属于多个不同的列表,一个列表可以有多个不同的患者


假设我有一个患者属于3个列表(a、B、C)。我想从列表A和B中删除患者。显然,我不想删除列表A和B本身。我该怎么做呢?

所以为了建立这种关系的模型,在患者和列表之间有一种多对多的关系。假设在核心数据中,这是由列表上的
患者
关系表示的,与之相反的
列表
患者关系。此外,让我们假设列表有一些属性
name
,其名称为NSString

为了“打破”关系(从某些列表中删除患者),您必须对要删除的患者NSManagedObject以及要从中删除该患者的列表有一个引用。然后,剩下要做的就是为每个列表获取一组可变的患者,并删除所需的患者:

// Assuming you have some PatientManagedObject *patient:
NSSet *patientLists = [patient lists]; // Set of ListManagedObjects
for(ListManagedObject list in patientLists) {
    if([[list name] isEqualToString:@"A"] || [[list name] isEqualToString:@"B"]){
        // Now you have to build the set of patients without this patient
        NSMutableSet *listPatients = [list mutableSetValueForKey:@"patients"];
        [listPatients removeObject:patient];
    }
}

有关更多数据,请参阅。

虽然Tim的上述回答在技术上是正确的,但对我来说,这似乎是一段相当多的代码

我假设要从列表中删除患者,您已经知道该列表,并且在您想要删除该患者时有对该列表的引用。因此,代码可以简单到:

id myPatient = ...;
id myList = ...;
[[myPatient mutableSetValueForKey:@"lists"] removeObject:myList];
这当然是假设你的关系是双向的。如果它们不是,那么我强烈建议你把它们做成双向的

最后,由于这是一个多对多关系,您可以在任意方向执行上述代码

[[myList mutableSetValueForKey:@"patients"] removeObject:myPatient];
更新 那么代码就更简单了:

[myPatient setLists:nil];

这将从所有列表中删除患者。

根据该文档中的“与多个关系”部分,您似乎可以执行[list removePatientObject:patient]我实际上是在尝试“解除”患者(因此将其从所有活动列表中删除)。我提到了患者NSManagedObject,但我没有提到它所属的任何列表。哇!我没想到会这么简单。谢谢。您好,我遵循了前面的方法,它与一对多关系有效。在实体A和B之间存在多对多关系的情况下,我有一个中断的实体C。我用于从连接A和B的实体C中删除对象。但除非从数据库中重新获取记录,否则我无法看到结果。有什么我不知道的吗。谢谢,最好将此作为一个单独的问题提问,这样你就可以更详细地解释情况,因为我很难想象你在问什么。谢谢你的重播,我在以下链接上发布了一个单独的问题: