2012-05-10 4 views
0

У меня есть NSComboBox в моем файле mainmenunib. Я создал выход combobox «cb» и связал его с моим делегатом Я также связал делегат и источник данных с моим делегатом.Как отображать данные в nscombobox в какао?

-(void)applicationDidFinishLaunching:(NSNotification *)aNotification 
{ arr=[NSMutableArray arrayWithObjects:@"a",@"b",@"c",@"d",@"e",@"f", nil]; 
[cb reloadData]; 
} 

-(NSInteger)numberOfItemsInComboBox:(NSComboBox *)aComboBox{ 
return arr.count; 
} 

-(id)comboBox:(NSComboBox *)aComboBox objectValueForItemAtIndex:(NSInteger)loc{ 
return [arr objectAtIndex:loc]; 
} 

Но когда я запускаю данные приложения, не идет в combobox. Пожалуйста, помогите мне, поскольку я новичок в программировании какао. Спасибо заранее.

ответ

2

Ваш подход кажется разумным на первый взгляд, хотя использование изменяемого объекта в качестве переменной экземпляра часто не рекомендуется (по причинам, совершенно не связанным с вашей проблемой здесь, и которые нам не нужно вводить на этом этапе) ,

Есть две вещи, которые прыгают, как возможные проблемы:

1) Вы используете ARC? Если нет, arr исчезнет из-под вас, потому что -arrayWithObjects возвращает объект с автореализацией, и вы ничего не сохраняете. Если вы используете ARC (по умолчанию для нового проекта на Lion, я считаю), это не относится к вам. Плюс я ожидаю, что вы потерпите крах, а не получите никаких данных.

2) Скорее всего, вы забыли -setUsesDataSource:YES, который является флагом, который сообщает NSComboBox, следует ли смотреть на его источник данных или использовать внутренний подход к содержимому, поставляемый @JustinBoo. Я считаю, что это значение по умолчанию равно NO, что вызовет вашу конкретную проблему. У меня нет интерфейса Builder передо мной в данный момент, но у IIRC есть флажок «использует источник данных», который вы можете проверить, чтобы включить этот атрибут.

1

Вы можете добавить объекты с помощью -addItemWithObjectValue к вашему NSComboBox так:

arr = [NSMutableArray arrayWithObjects:@"a",@"b",@"c",@"d",@"e",@"f", nil]; 

for (int i = 0; i < [arr count]; ++i) 
{ 
    [cb addItemWithObjectValue:[arr objectAtIndex:i]]; 
} 

Вы можете увидеть NSComboBox Reference для получения дополнительной информации.

+0

Это * один * способ сделать это. Однако OP, похоже, заинтересован в использовании источника данных, что вполне приемлемо (и, возможно, более гибкое). –

+0

Да, этот подход является простым. – user1295948

Смежные вопросы