并感谢您的关注...
我什至不知道如何表达这个问题,更不用说寻找答案了......老实说,我已经尝试过了,所以需要所有帮助!
这可能很简单,因为我确信这是一种经常发生的模式:
我的模型 (MainLevel*) 中有一个与自身有关系的实体。
实体用于法律的级别,唯一的要求是每个法律至少有一个(最高)级别。除此之外,从技术上讲,子级别的数量是无限的(但实际上通常约为 5 个,最多可能不超过 8-10 个)。正如所料,每个子级别只有一个父级(MainLevel.parentLevel),任何父级都可以有多个(或零个)子级(NSSet *childLevels)。
我想做的是将这种关系的所有结构放入一个UITableView
或一个collectionView中。
我有一个递归函数如下:
- (NSDictionary *)getStructureOfLawForLevel:(MainLevel *)level
{
NSMutableDictionary *mutableDict = [[NSMutableDictionary alloc]initWithCapacity:50];
MainLevel *currentLevel = level;
[mutableDict setObject:currentLevel.shortName forKey:@"name"];
if (level.childLevels) {
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"order" ascending:YES];
NSArray *sortdescriptors = @[sortDescriptor];
NSArray *children = [currentLevel.childLevels sortedArrayUsingDescriptors:sortdescriptors];
for (MainLevel *childLevel in children)
{
NSDictionary *dict = [self getStructureOfLawForLevel:childLevel];
[mutableDict setObject:dict forKey:@"sublevels"];
}
}
return [mutableDict copy];
}
然后在viewWillAppear:
我有这个:
self.structure = [self getStructureOfLawForLevel:self.selectedLevel]
有了这个,我希望我在正确的路线上......(由于我现在正在排序的另一个问题而未经测试)。
我仍然无法弄清楚如何从中配置 aUITableView
或 a UICollectionView
。我的意思是我确信我可以通过添加一个或两个计数器并以这种方式获取行数和节数来做到这一点。它只是看起来方式,方式过于复杂,我确信一定有一个更明显的方法,我只是没有看到......
数据的唯一标准是它必须按.order
实体实例的属性排序,并且不是唯一的。我的意思是,例如,每个 childLevel 可以有一个 order 编号为 1 的 childLevel。它是那个 parent level 中的 order。
对不起,如果这已经被问了一千次。我试图寻找答案,但似乎没有找到我正在使用的搜索词。
除了放在屏幕上,没有编辑,添加,删除之外,我没有对这些数据做任何事情......不确定这是否相关。
为清楚起见编辑...
我不想做一个向下钻取类型的表格视图。我想在一个视图中获取整个结构的快照,然后我可能需要从中向下钻取(使用与模型中其他实体的关系)。
编辑我的解决方案
这就是我最终做的......
- (NSArray *)getStructureAsArrayForLevel:(MainLevel *)child
{
NSMutableArray *thisChildAndChildren = [[NSMutableArray alloc]initWithCapacity:2];
[thisChildAndChildren addObject:child];
if (child.childLevels)
{
// children exist
// sort the children into order
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"order" ascending:YES];
NSArray *sortdescriptors = @[sortDescriptor];
NSArray *children = [child.childLevels sortedArrayUsingDescriptors:sortdescriptors];
// get an array for each child via recursion
for (MainLevel *child in children)
{
[thisChildAndChildren addObject:[self getStructureAsArrayForLevel:child]];
}
}
return [thisChildAndChildren copy];
}
然后我使用类似的递归函数将数组转换为 NSAttributedString 并显示在 textView 中。
我真的不喜欢递归。我不知道为什么,但我发现我很难理解逻辑,当它完成时,它似乎很明显......去想一想!
感谢大家的建议,帮助等...