Изменить значения внутри массива - PullRequest
1 голос
/ 09 декабря 2010

Например: у меня есть изменяемый массив BOOL (или [NSNumber numberWithBool: TRUE];).и затем я хочу изменить, например, первое значение в этом массиве на ЛОЖЬ.

[array addObject:[NSNumber numberWithBool:TRUE]];
[array objectAtIndex:0] ??? 

Я знаю довольно странный способ выполнить эту задачу.

[array replaceObjectAtIndex:0 withObject:[NSNumber numberWithBool:FALSE]];

Да, этополностью удовлетворяет меня, но я ищу другой путь, более простой, чем этот.Что-то вроде [[array objectAtIndex:0] setBoolValue:FALSE]; например, представьте, если бы у меня вместо BOOL был UIButton: [[array objectAtIndex:0] setHidden:TRUE]; или это только сны?

Заранее спасибо!

Ответы [ 3 ]

10 голосов
/ 09 декабря 2010

Лучший способ сделать это -

[array replaceObjectAtIndex:0 withObject:[NSNumber numberWithBool:FALSE]];

Причина в том, что [array objectAtIndex:0] возвращает NSNumber, в отличие от того, если бы у вас был массив UIButton s, который возвратил бы объект UIButton, с которым вы могли бы работать. Поскольку вы получаете NSNumber взамен, вы ничего не можете сделать, чтобы сделать NSNumber напрямую, так как у него нет нужных вам методов, поэтому вы должны работать с массивом, который содержит NSNumber.

2 голосов
/ 09 декабря 2010

Ничто не мешает вам отправлять мутирующие сообщения объекту в массиве, но NSNumber просто не изменяем. Вот почему вы должны заменить числовой объект другим. Это не имеет ничего общего с массивом или языком - вы просто не можете изменить NSNumber.

0 голосов
/ 10 декабря 2010

Здесь есть что понять: массивы - это простые наборы указателей на объект. Следовательно, вы можете легко к таким вещам, как
((UIButton*)[array objectAtIndex:0]).hidden=TRUE;
Модификация объекта возможна и часто выполняется. Но, заменяя один объект на другой, вы должны использовать методы замены, как вы указали. Однако более простые объекты, как сказано выше @Chuck, просто не изменяемы (как NSNumber).

Пожалуйста, обратите внимание, что мой код выше ужасен с точки зрения стабильности. Откуда вы, конечно, знаете, что это UIButton, который вы вытаскиваете из своей волшебной шляпы (т.е. массива?)

...