我正在尝试向此NSArray(labelArray)添加对象,但由于某种原因,它每次都在NSLog中返回为(null),并且计数保持为0。
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(howFarAlong, howFarDown, 50, 70)];
label.text = @"text";
[self.view addSubview:label];
[labelArray addObject:label];
NSLog(@"%@", labelArray);
[label release];
答案 0 :(得分:12)
NSArray
是不可变的。如果您想致电-addObject:
,请使用NSMutableArray
。如果labelArray
是NSArray
,则应该崩溃。如果它没有崩溃,那么它可能是nil
,你还没有初始化它。 将工作的一些代码:
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(howFarAlong, howFarDown, 50, 70)];
label.text = @"text";
[self.view addSubview:label];
if (labelArray == nil) {
labelArray = [[NSMutableArray alloc] init];
}
[labelArray addObject:label];
NSLog(@"%@", labelArray);
[label release];
答案 1 :(得分:2)
如果要更改数组中的数据,则需要使用NSMutableArray。 NSArray只能用于创建静态数组。
答案 2 :(得分:0)
您可能还会从编译器收到一条消息,指出NSArray可能无法响应'addObjext'。这是您的线索,您正在使用的对象将不会执行请求的选择器(方法)。在这种情况下,您正在尝试更改不可变对象,这将无效。您需要使用NSMutableArray。我建议您阅读Apple文档中的差异。
答案 3 :(得分:0)
我测试了下面的代码。添加标签后,计数为1。
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(howFarAlong, howFarDown, 50, 70)];
label.text = @"text";
[self.view addSubview:label];
NSArray *labelArray = [NSArray arrayWithObject:label];
NSLog(@"Count: %d", labelArray.count);