Почему этот NSArray не работает? Я пытаюсь добавить объекты к нему - PullRequest
2 голосов
/ 24 февраля 2011

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

12 голосов
/ 25 февраля 2011

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 голосов
/ 25 февраля 2011

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

0 голосов
/ 25 февраля 2011

Я тестировал код ниже. После добавления метки счетчик равен 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);
0 голосов
/ 25 февраля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...