gpt4 book ai didi

ios - 如何以某种通用方式删除有序的对多 CoreData 关系中的对象?

转载 作者:行者123 更新时间:2023-11-29 10:23:10 24 4
gpt4 key购买 nike

我有一个联系人实体与另一个实体的电子邮件地址、电话存在一对多关系。

这种关系(自然称为“电子邮件、电话”)也是有序的,因此我可以在 TableView 中显示联系人的电子邮件地址列表,并允许用户删除或修改每一个。据我所知,它们需要排序,这样我才能知道哪个被删除/修改:例如,如果用户点击第 1 行中的删除按钮,则第二个电子邮件地址应该从关系中删除。没有命令,我不知道要删除哪一个。

当生成 NSManagedObject 子类时,我在该类上获得了一个 NSOrderedSet 属性,CoreData 在 .h 文件中提供了一些访问器:

@interface Contact (CoreDataGeneratedAccessors)
- (void)insertObject:(PLEmail *)value inEmailsAtIndex:(NSUInteger)idx;
- (void)removeObjectFromEmailsAtIndex:(NSUInteger)idx;
- (void)insertEmails:(NSArray<PLEmail *> *)value atIndexes:(NSIndexSet *)indexes;
- (void)removeEmailsAtIndexes:(NSIndexSet *)indexes;
- (void)replaceObjectInEmailsAtIndex:(NSUInteger)idx withObject:(PLEmail *)value;
- (void)replaceEmailsAtIndexes:(NSIndexSet *)indexes withEmails:(NSArray<PLEmail *> *)values;
- (void)addEmailsObject:(PLEmail *)value;
- (void)removeEmailsObject:(PLEmail *)value;
- (void)addEmails:(NSOrderedSet<PLEmail *> *)values;
- (void)removeEmails:(NSOrderedSet<PLEmail *> *)values;

- (void)insertObject:(PLTelephone *)value inTelephonesAtIndex:(NSUInteger)idx;
- (void)removeObjectFromTelephonesAtIndex:(NSUInteger)idx;
- (void)insertTelephones:(NSArray<PLTelephone *> *)value atIndexes:(NSIndexSet *)indexes;
- (void)removeTelephonesAtIndexes:(NSIndexSet *)indexes;
- (void)replaceObjectInTelephonesAtIndex:(NSUInteger)idx withObject:(PLTelephone *)value;
- (void)replaceTelephonesAtIndexes:(NSIndexSet *)indexes withTelephones:(NSArray<PLTelephone *> *)values;
- (void)addTelephonesObject:(PLTelephone *)value;
- (void)removeTelephonesObject:(PLTelephone *)value;
- (void)addTelephones:(NSOrderedSet<PLTelephone *> *)values;
- (void)removeTelephones:(NSOrderedSet<PLTelephone *> *)values;
@end

我的问题是有什么方法可以使这段代码通用,所以应该删除 isKindOfClass 检查:

NSArray *nestedArray = [orderedSet array];
id nestedObject = [nestedArray objectAtIndex:indexPath.row];
if ([nestedObject isKindOfClass:[PLEmail class]]) {
PLEmail *email = (PLEmail *)nestedObject;
[email MR_deleteEntity];
[self.contact removeEmailsObject:email];
}
else if ([nestedObject isKindOfClass:[PLTelephone class]]) {
PLTelephone *telePhone = (PLTelephone *)nestedObject;
[email MR_deleteEntity];
[self.contact removeTelephonesObject:telePhone];
}

最佳答案

如果您有互惠关系(如推荐的那样),您可以取消电子邮件或电话实体上的联系关系。这也将从联系人列表中删除该实体。

处理多重关系的示例代码

- (void)removeRelationship:(NSString *)relationshipKeyPath fromEntity:(NSManagedObject *)entity {
[entity setValue:nil forKeyPath:relationshipKeyPath];
}

你会像这样使用它:

[self removeRelationship:@"contact" fromEntity:unknownRelationshipForContact];

关于ios - 如何以某种通用方式删除有序的对多 CoreData 关系中的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33797177/

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