【发布时间】:2015-11-19 06:59:12
【问题描述】:
我有一个联系人实体,它与另一个实体的电子邮件地址、电话有一对多的关系。
这种关系(自然称为“电子邮件,电话”)也是有序的,因此我可以在表格视图中显示联系人的电子邮件地址列表,并允许用户删除或修改每一个。据我所知,需要订购它们,以便我可以知道哪个被删除/修改:例如,如果用户点击第 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];
}
【问题讨论】:
-
您不需要订购型号。相反,只需订购您的数据源。但那是另一回事了。
-
如果MR_deleteEntity删除了对象,删除规则为null,则该对象自动从联系人中删除。
-
删除规则无效,但它只是使对象为零,而不是删除..
-
有序集中的对象可以为零吗?
-
@Willeke 在有序集中没有对象不能为 nil。
标签: ios objective-c core-data