为什么我不能向这个数组中添加对象?

Why can't I add objects to this array?

出于某种原因,当我制作 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);

使用这个:

self.titleLabels.children

这是子节点的内置数组

正如您在自己的回答中指出的那样,在这种情况下,无需将 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

最后我建议你使用实例变量而不是属性当不需要使变量public.

可以这样声明

@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);