为什么我不能向这个数组中添加对象?
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);
出于某种原因,当我制作 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);