NSMutableArray заполнен указателями - PullRequest
0 голосов
/ 07 июня 2010

Я знаю, что этот вопрос уже задавался в прошлом, но я действительно сбит с толку и не могу от него избавиться.

у меня есть 9 указателей на объекты IB, объявленные как:

IBOutlet UIButton * but1;

IBOutlet UIButton * but2;

....

NSMutableArray * кнопки;

объявленные свойства:

@ свойство (неатомное, сохранение) IBOutlet UIButton * but1;

@ property .....

в IB я установил соединения от кнопок до указателей.

Теперь мне нужно заполнить кнопки массива этими указателями для запуска таких методов UIButton, как

[[кнопки objectWithId: 0] setImage: [UIImage imageNamed: @ "image1.png"]];

Я знаю, что не могу заполнить массивы указателями, есть ли способ получить IBOutlets в массивы?

Ответы [ 2 ]

1 голос
/ 07 июня 2010

Вы не можете заполнять контейнеры Какао произвольными указателями, но указатели на объекты типа класса - такие как ваши UIButton s - хороши.
Контейнеры какао сохраняют и освобождают добавленные к ним объекты, поэтому указатели на не-класс типов должны быть обернуты, например, в. NSValue.

Также обратите внимание, что IBOutlet не является типом, это пустой макрос, который просто используется для разметки частей кода для Interface Builder.

0 голосов
/ 07 июня 2010

Ваше переосмысление проблемы. По умолчанию все ссылки на все объекты являются указателями.

Это:

IBOutlet UIButton *but1;

... определяет указатель.

Следовательно, все операции по умолчанию с объектами используют указатели. Вы обычно даже не должны думать об этом. Чтобы добавить указатель на UIButton в NSMutableArray, просто используйте (обратите внимание на нотацию self):

[self.buttons addObject:self.but1];

Обозначение IBOutlet не влияет на ссылки в коде. Именно здесь Interface Builder может анализировать исходный код и выяснять, на какие свойства следует обратить внимание. В противном случае он ничего не делает, и вы можете игнорировать это.

Конечно, я должен спросить: почему вы помещаете в массив кнопки с уже названными свойствами?

Вместо этого:

[[buttons objectWithId:0] setImage:[UIImage imageNamed:@"image1.png"]];

... почему бы просто не сделать это?

[self.but1 setImage:[UIImage imageNamed:@"image1.png"] forState:UIControlStateNormal]; 

Нет смысла использовать именованные свойства, если вы не используете имена в качестве основной ссылки.

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