出于某种原因,当我制作NSMutableArray时,它不会添加SKLabelNodes。我在我的代码中添加它们,但是当我要求计数时它给了我0.我做错了什么?或者是应该工作不起作用的东西?老实说,我不知道
self.titleLabels = [[SKNode alloc]init];
self.titleLabels.position = CGPointMake(CGRectGetMidX(self.frame), 700);
self.titleLabelsArray = [[NSMutableArray alloc]initWithCapacity:5];
SKLabelNode *label1 = [SKLabelNode labelNodeWithFontNamed:@"Code-Pro-Demo"];
label1.text = @"0";
label1.fontSize = 90;
label1.fontColor = [SKColor colorWithRed:90/255.0f green:197/255.0f blue:198/255.0f alpha:1];
label1.position = CGPointMake(-150, 100);
label1.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:label1.frame.size];
label1.physicsBody.dynamic = NO;
SKLabelNode *label2 = [SKLabelNode labelNodeWithFontNamed:@"Code-Pro-Demo"];
label2.text = @"1";
label2.fontSize = 90;
label2.fontColor = [SKColor colorWithRed:1 green:1 blue:1 alpha:1];
label2.position = CGPointMake(-30, 100);
label2.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:label2.frame.size];
label2.physicsBody.dynamic = NO;
SKLabelNode *label3 = [SKLabelNode labelNodeWithFontNamed:@"Code-Pro-Demo"];
label3.text = @"2";
label3.fontSize = 90;
label3.fontColor = [SKColor colorWithRed:1 green:1 blue:1 alpha:1];
label3.position = CGPointMake(150, 100);
label3.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:label3.frame.size];
label3.physicsBody.dynamic = NO;
SKLabelNode *label4 = [SKLabelNode labelNodeWithFontNamed:@"Code-Pro-Demo"];
label4.text = @"3";
label4.fontSize = 90;
label4.fontColor = [SKColor colorWithRed:1 green:1 blue:1 alpha:1];
label4.position = CGPointMake(-150, 0);
label4.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:label4.frame.size];
label4.physicsBody.dynamic = NO;
SKLabelNode *label5 = [SKLabelNode labelNodeWithFontNamed:@"Code-Pro-Demo"];
label5.text = @"4";
label5.fontSize = 120;
label5.fontColor = [SKColor colorWithRed:228/255.0f green:70/255.0f blue:38/255.0f alpha:1];
label5.position = CGPointMake(10, -1);
label5.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:label5.frame.size];
label5.physicsBody.dynamic = NO;
[self.titleLabels addChild:label1];
[self.titleLabels addChild:label2];
[self.titleLabels addChild:label3];
[self.titleLabels addChild:label4];
[self.titleLabels addChild:label5];
[self addChild:self.titleLabels];
[self.titleLabelsArray addObject:label1];
[self.titleLabelsArray addObject:label2];
[self.titleLabelsArray addObject:label3];
[self.titleLabelsArray addObject:label4];
[self.titleLabelsArray addObject:label5];
NSLog(@"%i",self.titleLabelsArray.count);
答案 0 :(得分:0)
正如您在自己的回答中所指出的,在这种情况下,不需要将5个SKLabelNode添加到不同的数组中,实际上您可以使用self.titleLabels.children迭代它们。
但是我试图理解为什么你的原始代码没有按预期工作,事实上你的最后一行代码确实应该打印数字5.
第1步
编译器不喜欢这一行
NSLog(@"%i",self.titleLabelsArray.count);
因为NSUInteger类型的值不应该用作格式参数。请改用:
NSLog(@"%lu",(unsigned long)self.titleLabelsArray.count);
第2步
代码确实正常工作(并打印5)如果属性titleLabelsArray未声明为弱。 例如。这是一个正确的声明:
@property NSMutableArray * titleLabelsArray;
这是输出:
2015-03-29 16:09:31.919 MyProject[1231:695366] 5
另一方面,对于这种情况,这是一个错误的声明:
@property (weak) NSMutableArray * titleLabelsArray;
现在你得到了这个输出:
2015-03-29 16:10:59.713 MyProject[1275:699690] 0
所以我的问题是:你如何声明属性titleLabelsArray?
第3步
最后,我建议您在不需要将变量公开时使用实例变量而不是属性。
您可以这样声明
@implementation YourSuperCoolClass
{
NSMutableArray * titleLabelsArray;
}
然后您在没有 self。前缀
的情况下访问它[titleLabelsArray addObject:label1];
[titleLabelsArray addObject:label2];
[titleLabelsArray addObject:label3];
[titleLabelsArray addObject:label4];
[titleLabelsArray addObject:label5];
NSLog(@"%lu",(unsigned long)titleLabelsArray.count);
答案 1 :(得分:-1)
使用此:
self.titleLabels.children
这是一个用于子节点的内置数组