2013-07-25 3 views
2

У меня возникла странная проблема с компонентом NSComboBox. Его «selectIndexAtPath» поведение меняется в зависимости от источника данных:Странная ошибка в NSComboBox: selectItemAtIndex работает неправильно при использовании источника данных

  • А «фиксированного» список вызывает пункт, чтобы правильно выбрать и когда я открываю список, нажав на кнопку со стрелочкой справа, он продолжает быть выбран , Однако;
  • Использование источника данных заставляет элемент правильно выбирать, но когда я открываю список, нажав на кнопку со стрелкой справа, элемент все еще выбран в течение 1/10 секунды, но затем отменяется.

Некоторый код для иллюстрации:

@interface AppDelegate() 

@property (weak) IBOutlet NSComboBox *combobox; 
@property (strong, nonatomic) NSArray *temp; 

@end 

@implementation AppDelegate 

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification 
{ 
    self.temp = @[@"Item", @"Item2", @"Item3", @"Item4", @"Item5"]; 

    /* THIS DOES WORK */ 
    self.combobox.usesDataSource = NO; 
    [self.combobox addItemsWithObjectValues:self.temp]; 

    /* HOWEVER, THIS DOES NOT WORK */ 
    self.combobox.usesDataSource = YES; 
    self.combobox.dataSource = self; 

    [self.combobox selectItemAtIndex:2]; 
} 

#pragma mark - NSComboBoxDataSource methods 

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

- (id)comboBox:(NSComboBox *)aComboBox objectValueForItemAtIndex:(NSInteger)index 
{ 
    return self.temp[index]; 
} 

Кто-нибудь знает, что причины этого? Пытаюсь уже несколько дней ... спасибо!

ответ

2

Найденный!

Вы также должны реализовать indexOfItemWithStringValue так:

- (NSUInteger)comboBox:(NSComboBox *)aComboBox indexOfItemWithStringValue:(NSString *)aString 
{ 
    return [self.temp indexOfObject:aString]; 
} 
0

Чтобы установить выбранный выпадающий к выбранному элементу для источника данных, который вы используете следующие за документацию:

[self.comboBox selectItemAtIndex:2]; 
[_comboBox setObjectValue:[self comboBox:_comboBox 
      objectValueForItemAtIndex:[_comboBox indexOfSelectedItem]]]; 

Однако основная проблема заключается в том, что, так как вы сделали в качестве источника данных «я» он должен для реализации протокола NSComboBoxDataSource. Поскольку ваш источник данных «я» не реализует этот протокол, он будет работать неправильно.

Обратите внимание, что в приведенном выше селекторе, когда я говорю [self comboBox: _comboBox], это имя вашего объекта источника данных .

Эта информация находится в here.

+0

Это реализовать протокол NSComboBoxDataSource, но в файле заголовка. Также следующий код: [self.combobox selectItemAtIndex: 2]; [self.combobox setObjectValue: [self comboBox: self.combobox objectValueForItemAtIndex: [self.combobox indexOfSelectedItem]]]; Выполняет то же самое (неправильное). Спасибо за ваш комментарий, но это мне не помогло. –

+0

Не видел в заголовке и предположил, что вы не реализовали. – trueinViso