2011-02-24 2 views
2

Я пытаюсь добавить объекты к этому NSArray (labelArray), но по какой-либо причине он возвращает каждый раз в качестве (null) в NSLog, а счетчик остается в 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

Можете ли вы показать код, в котором вы инициализируете свой 'NSMutableArray * labelArray'? – Richard

+0

не связан с xcode. проверьте использование тега [xcode]: http://stackoverflow.com/tags/xcode/info – vikingosegundo

ответ

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

Вам нужно использовать NSMutableArray, если вы хотите изменить данные в своем массиве. NSArray можно использовать только для создания статических массивов.

0

Возможно, вы также получите сообщение от компилятора о том, что NSArray может не реагировать на "addObjext. Это ваша подсказка, что объект, который вы используете, не будет выполнять запрошенный селектор (метод). В этом случае вы пытаетесь изменить неизменяемый объект, который не будет работать. Вам нужно использовать NSMutableArray. Я предлагаю вам ознакомиться с различиями в документации Apple.

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); 
Смежные вопросы