我有一个Patient实体和一个List实体。患者可以属于几个不同的列表,列表可以有几个不同的患者。
假设我的病人属于3个名单(A,B,C)。我想将病人从名单A& B.我不想删除列表A& B本身虽然很明显。我该怎么做呢?
答案 0 :(得分:8)
虽然蒂姆上面的回答在技术上是正确的,但对我来说似乎有点相当多的代码。
我认为要从列表中删除患者,您已经知道该列表并在您想要移除患者时对其进行引用。因此,代码可以简单如下:
id myPatient = ...;
id myList = ...;
[[myPatient mutableSetValueForKey:@"lists"] removeObject:myList];
这当然是假设您的关系是双向的。如果他们不是那么我强烈建议你使它们双向。
最后,因为这是多对多的关系,所以你可以在任何一个方向执行上面的代码。
[[myList mutableSetValueForKey:@"patients"] removeObject:myPatient];
然后代码更简单:
[myPatient setLists:nil];
这将从所有名单中删除患者。
答案 1 :(得分:1)
因此,为了模拟这种关系,患者和列表之间存在多对多的关系。假设在核心数据中,这由列表上的patients
关系表示,患者上的反lists
关系。此外,我们假设List有一些带有列表名称的属性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];
}
}
有关更多数据,请参阅the relevant Core Data documentation。