C伙计们,我是一个刚刚跳入Obj-C几天的新手。我有这个问题,我知道这可能很简单,但我确实花了很多时间在网上搜索但找不到相关答案,请在此处提供帮助。
我正在尝试编写一个简单的 n 元树数据结构以供练习。我创建了一个名为 ICNode 的类,其中它为它的子级、父级和深度保存了一个 NSMutableArray。
#import <Foundation/Foundation.h>
@interface ICNode : NSObject
{
}
@property (nonatomic, weak) id content;
@property (nonatomic, weak) ICNode *parent;
@property (nonatomic, strong) NSMutableArray *children; // should store ICNode
@property (nonatomic) int depth; // root is 0, not set is -1
然后我写了一个简单的测试代码来测试它。
for (int i = 1; i <= 2; i++) {
NSString *string = [[NSString alloc] initWithFormat:@"Test %d", i];
ICNode *child = [[ICNode alloc] init];
[child setContent:string];
[root addChild:child];
STAssertEqualObjects([child parent], root, @"child's parent is root");
STAssertEquals([child depth], 1, @"children's depth is 1");
}
STAssertEquals([root numberOfChildren], 2, @"root's number of children is testRun");
NSLog(@"%@", root);
我的问题是,在最后一行代码 NSLog 中,我希望看到这样的内容:
"Content: Test 1(depth=1) -> Parent: I am Root -> Children: (null)",
"Content: Test 2(depth=1) -> Parent: I am Root -> Children: (null)"
但相反,它总是
"Content: (null)(depth=1) -> Parent: I am Root -> Children: (null)",
"Content: (null)(depth=1) -> Parent: I am Root -> Children: (null)"
然后我在那里放了一个断点,发现addChild方法之后就是find,但是循环结束后,child的内容会变为null。我对指针的东西不太熟悉,所以我怀疑这与指针有关。
另一个观察是如果我做这样的事情,
NSString *string = [[NSString alloc] initWithFormat:@"Test %d", 1];
ICNode *child = [[ICNode alloc] initWithContent:string parent:root];
NSString *string1 = [[NSString alloc] initWithFormat:@"Test %d", 2];
ICNode *child1 = [[ICNode alloc] initWithContent:string1 parent:root];
NSLog(@"%@", [root description]);
然后输出就好了。但我确实希望能够使用循环创建节点。
请帮忙,谢谢。