Если вы действительно реализовали эти методы в своем файле spcAppDelegate.m
, вы можете перепроверить, что Uses Data Source
проверен для NSComboBox
в nib-файле в Интерфейсном Разработчике:
Обратите внимание, что он не был установлен по умолчанию в проекте быстрого тестирования, который я создал.При запуске без этого набора флажков при запуске приложения в консоли должно регистрироваться следующее:
NSComboBox[2236:403] *** -[NSComboBox setDataSource:] should not be called when
usesDataSource is set to NO
NSComboBox[2236:403] *** -[NSComboBoxCell setDataSource:] should not be called
when usesDataSource is set to NO
Хотя справочник по классам NSComboBox несколько полезен, когда я впервые изучал, я обнаружил, чтоесли есть сопутствующие руководства, связанные с классом, они были бы гораздо полезнее для понимания того, как следует использовать класс на практике.Если вы посмотрите на верхнюю часть справочника по классу NSComboBox
в Справочнике для сопровождающих , вы увидите Темы программирования комбинированного блока .
Чтобы настроить комбоВ поле, в котором используется источник данных, вы можете использовать что-то вроде следующего:
spcAppDelegate.h:
#import <Cocoa/Cocoa.h>
@interface spcAppDelegate : NSObject <NSApplicationDelegate,
NSComboBoxDelegate, NSComboBoxDataSource> {
IBOutlet NSWindow *window;
IBOutlet NSComboBox *comboBox;
NSMutableArray *comboBoxItems;
}
@property (assign) IBOutlet NSWindow *window;
@end
spcAppDelegate.m:
#import "spcAppDelegate.h"
@implementation spcAppDelegate
@synthesize window;
- (id)init {
if ((self = [super init])) {
comboBoxItems = [[NSMutableArray alloc] initWithArray:
[@"Cocoa Programming setting the delegate"
componentsSeparatedByString:@" "]];
}
return self;
}
- (void)dealloc {
[comboBoxItems release];
[super dealloc];
}
- (NSInteger)numberOfItemsInComboBox:(NSComboBox *)aComboBox {
return [comboBoxItems count];
}
- (id)comboBox:(NSComboBox *)aComboBox objectValueForItemAtIndex:(NSInteger)index {
if (aComboBox == comboBox) {
return [comboBoxItems objectAtIndex:index];
}
return nil;
}
- (void)comboBoxSelectionDidChange:(NSNotification *)notification {
NSLog(@"[%@ %@] value == %@", NSStringFromClass([self class]),
NSStringFromSelector(_cmd), [comboBoxItems objectAtIndex:
[(NSComboBox *)[notification object] indexOfSelectedItem]]);
}
@end
Пример проекта:http://github.com/NSGod/NSComboBox.