네트워크 호출에서 반환 된 NSData에 NSJSONSerialization을 사용하면 NSDictionaries 및 NSArrays의 중첩 구조가 반환됩니다.중첩 된 NSDictionary 구조 - 트리의 모든 노드의 부모에 대한 참조를 보유하는 방법
이제 트리 구조를 구문 분석하고 추가 사용을 준비하고 싶습니다. 트리의 각 노드는 항상 하위 노드 (NSDictionaries)의 NSArray를 전달합니다. 이 노드들 모두는 하위 노드가 포함 된 NSArray를 포함하는 그것의 부모 노드에 대한 역 참조를 가져야합니다.
이 내가 무슨 말을하고있는 구조의 기본 예입니다
Node {
nodes:[
node {parent:Node,name:foo},
node {parent:Node,name:bar},
node {parent:Node,name:baz},
]
,name:root}
각 노드가있는 NSDictionary와 NSDictionaries을 포함하는 각 하위 노드 컬렉션있는 NSArray입니다.
새로운 키 "부모"를 추가하고 그 값을 부모 노드 사전에 설정할 수 없다는 것을 알았습니다. 이것은 객체를 호출 할 때 segfault를 만듭니다. 코드의
기본 예를 들어, 상위 키 생성 :
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
가 왜 세그먼트 오류를 얻고 있습니까? 노드의 부모 키에있는 역 참조로 인해 구조 설명을 인쇄하는 동안 이것은 무한 루프입니까?
여기이 문제에 대한 다른 접근 방법이 있습니까? 각 키를 가리키는 트리 구조의 외부 표현을 보유해야합니까? 아니면 IS 실제로 부모 노드에 대한 일종의 참조를 저장하는 방법이 있습니까?
미리 감사드립니다.
감사! 나는 그 답장을 기대했고, 이제는 내 자신의 모델을 쓸 필요가 있다고 확신한다. 그로 인해 나는 다시 참조 할 수 있습니다. – Nonlinearsound
@Nonlinearsound 안녕하세요. NSTreeNode 클래스를 살펴보십시오. 내가 생각하기에 더 좋아야한다. – MadhavanRP
다시 한번 감사드립니다. iOS 용으로 개발 중이며 불행히도 NSTreeNode는 지원되지 않습니다. 그러나 어쨌든 구조에 대한 아이디어를 얻는 것만으로도 그것을 살펴볼 것입니다. – Nonlinearsound