我有各种与实体存在一对多关系的核心数据实体Battery
:
Battery-----1-Many-----Comment
Battery-----1-Many-----Measurement
Battery-----1-Many-----Photo
我编写了一个很棒的函数,它连接服务器并从关系中应用更新、添加和删除。在这里,为“评论”关系编码,为简洁起见非常简单地简化:
- (void)updateLocalDataWithClass:(Class)entityClass withSet:(NSSet*)existingRelationships {
NSMutableSet *entitiesToRemove = [NSMutableSet setWithSet:existingRelationships];
NSArray *serverObjects = [self getServerObjects];
for (NSMutableDictionary *serverDict in serverObjects) {
BaseEntityDO *existingEntity = [self getMatchingEntity:serverDict];
if (existingEntity) {
[existingEntity updateAttributesWithData:serverDict];
[entitiesToRemove removeObject:existingEntity];
} else {
BaseEntityDO *newEntity = [entityClass createEntity:serverDict];
[self addCommentsObject:newEntity];
}
}
[self removeBatteryComments:entitiesToRemove];
}
但是,我不想复制粘贴这个函数三次,对每个关系稍作修改。理想情况下,我想“将关系传递给函数”。即告诉函数我们正在处理评论、测量或照片关系 - 并让函数使用正确的“addCommentsObject”或“addMeasurementsObject”或“addPhotosObject”。
我需要替换的两行代码是:
[self addCommentsObject:newComment];
[self removeBatteryComments:entitiesToRemove];
理论上,我可以用一个 NSSet 替换来替换这两个,但我仍然需要知道我打算替换三个中的哪一个:
self.batteryComments = replacementEntitySet
谁能指出我正确的方向,这样我就可以优雅地updateLocalData
为每个关系调用一次我的函数。
谢谢