为什么这个NSArray无法正常工作?我正在尝试添加对象

时间:2011-02-24 20:59:23

标签: iphone objective-c cocoa-touch nsarray

我正在尝试向此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];

4 个答案:

答案 0 :(得分:12)

NSArray是不可变的。如果您想致电-addObject:,请使用NSMutableArray。如果labelArrayNSArray,则应该崩溃。如果它没有崩溃,那么它可能是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);