2014-02-14 2 views
1

Мне нужно сделать кучу кнопок из кода и добавить их в IBOutletConnection. Я пока не мог этого сделать. Когда я делаю это в раскадровке, он работает отлично, но я не могу добавить кнопку в коллекцию программно. Вот мой код:Как добавить UIButton в IBOutletCollection прорамально

.h

@property (nonatomic, retain) IBOutletCollection(UIButton)NSMutableArray *buttonsArray; 

.m

-(void)createButton 
{ 
    UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 

    [button addTarget:self 
       action:nil 
    forControlEvents:UIControlEventTouchDown]; 

    [self writeCloud:button]; 
    button.frame = CGRectMake(-50, 80, 90, 60); 
    [self.view addSubview:button]; 
    [_buttonsArray addObject:button]; 
} 

Ошибки я получаю на [_buttonsArray addObject:button]; говоря:

*** Нагрузочный приложение из-за uncaught exception "NSInvalidArgumentException", причина: '- [__ NSArrayI addObject:]: непризнанный селектор, отправленный в экземпляр 0x14559050'

Может ли кто-нибудь указать, что я делаю неправильно?

+0

buttons = [[NSMutableArray alloc] initWithCapacity: 1]; – codercat

+0

Это не имеет никакого смысла для меня. Если вы не используете построитель интерфейсов, почему вы пытаетесь использовать IBOutletCollection? Почему бы просто не использовать простой старый массив? –

ответ

3

Поскольку массив не изменен. Вы указали это в определении @property, но это не делает его истинным (если unarchive раскадровки устанавливает его в не изменяемый массив).

После загрузки вид я думаю, вы можете сказать:

self.buttonsArray = [self.buttonsArray mutableCopy]; 

и тогда ваш код должен работать.

+0

Wain, я понятия не имею, как это работает, но это сработало. Не могли бы вы объяснить немного лучше, пожалуйста. Почему мой массив не был изменен, если я объявлял его изменчивым в первую очередь? спасибо. – SteBra

+1

Вы объявили свойство как изменчивое, но вы не установили значение, процесс разблокировки сделал, и вам все равно, что вы сказали, что он должен быть изменчивым, он знает, как использовать неизменяемые объекты. Изменения, которые мы сделали, это немного обмануть и сделать изменчивую версию, прежде чем вы захотите ее отредактировать. – Wain