2011-02-24 73 views
2

我想添加对象到这个NSArray(labelArray),但由于某种原因,它在NSLog每次返回为(null),并且计数保持在0.为什么这个NSArray不工作?我试图添加对象到它

UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(howFarAlong, howFarDown, 50, 70)]; 
label.text = @"text"; 
[self.view addSubview:label]; 
[labelArray addObject:label]; 
NSLog(@"%@", labelArray); 
[label release]; 
+1

你可以显示你的'init'你的'NSMutableArray * labelArray'的代码吗? – Richard 2011-02-24 21:01:16

+0

与xcode无关。检查标签[xcode]的用法:http://stackoverflow.com/tags/xcode/info – vikingosegundo 2011-02-24 23:38:02

回答

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]; 
2

如果要更改数组中的数据,则需要使用NSMutableArray。 NSArray只能用于创建静态数组。

0

你可能还从编译器指出NSArray的可能不是“addObjext”响应收到一条消息。这是你的线索,你正在使用的对象不会执行请求的选择器(方法)。在这种情况下,您正尝试更改一个不可变的对象,这将不起作用。你需要使用一个NSMutableArray。我建议你阅读苹果文档中的差异。

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); 
相关问题