对来自网络调用的返回NSData使用NSJSONSerialization我找回NSDictionaries和NSArrays的嵌套结构。嵌套的NSDictionary结构 - 如何持有对树中每个节点的父节点的引用
现在我想解析该树结构并为进一步使用做好准备。树的每个节点总是携带一个NSArray的子节点(NSDictionaries)。这些节点中的每一个都应该有一个对其父节点的反向引用,包含子节点所属的NSArray。
这是我说的是该结构的一个基本的例子:
Node {
nodes:[
node {parent:Node,name:foo},
node {parent:Node,name:bar},
node {parent:Node,name:baz},
]
,name:root}
每个节点是一个NSDictionary并且每个子节点集合一个NSArray,含有NSDictionaries。
我了解到,我不能只是添加一个新的关键“父母”,并将其值设置为父节点字典。这在调用对象时会创建段错误。
代码的基本例如,在创建父键:
NSMutableDictionary * foo = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"foo",@"name",[NSNumber numberWithInt:1],@"value",nil];
NSMutableDictionary * bar = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"bar",@"name",[NSNumber numberWithInt:2],@"value",nil];
NSMutableDictionary * baz = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"baz",@"name",[NSNumber numberWithInt:3],@"value",nil];
NSMutableArray *array = [NSMutableArray arrayWithObjects:foo,bar,baz,nil];
NSMutableDictionary * container = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"root",@"name",array,@"nodes",nil];
[foo setValue:container forKey:@"parent"];
NSLog(@"%@",foo); // <-- segfault here
为什么会出现分段错误?由于节点的父键中的反向引用,打印出结构的描述时,这是一个无限循环吗?
你们有没有其他办法解决这个问题?我是否必须持有树结构的外部表示,指向每个键或实际存在某种方式来存储对父节点的某种引用?
很多,很多预先感谢!
谢谢!我有点期待答复,现在我相信我需要写自己的模型。通过这个我可以拿回参考。 – Nonlinearsound 2011-12-30 17:03:18
@Nonlinearsound不客气。请看看NSTreeNode类。我认为应该更好。 – MadhavanRP 2011-12-30 17:12:11
再次感谢。我正在为iOS开发,不幸的是NSTreeNode不支持那里。但无论如何,我会仔细看看它,即使只是想了解它的结构。 – Nonlinearsound 2011-12-30 17:24:47