Objective c NSCOMBOX中的奇怪错误:使用数据源时selectItemAtIndex无法正常工作

Objective c NSCOMBOX中的奇怪错误:使用数据源时selectItemAtIndex无法正常工作,objective-c,macos,cocoa,nscombobox,Objective C,Macos,Cocoa,Nscombobox,我在NSCOMBOX组件上遇到了一个奇怪的问题。其“selectIndexAtPath”行为会根据数据源的不同而变化: “固定”列表会使项目被正确选择,但当我通过单击右侧的箭头按钮打开列表时,它会继续被选择 使用数据源会使项目被正确选择,但当我通过单击右侧的箭头按钮打开列表时,该项目仍会被选择1/10秒,但随后会被取消选择 一些代码可以说明: @interface AppDelegate() @property (weak) IBOutlet NSComboBox *combobox; @

我在NSCOMBOX组件上遇到了一个奇怪的问题。其“selectIndexAtPath”行为会根据数据源的不同而变化:

  • “固定”列表会使项目被正确选择,但当我通过单击右侧的箭头按钮打开列表时,它会继续被选择
  • 使用数据源会使项目被正确选择,但当我通过单击右侧的箭头按钮打开列表时,该项目仍会被选择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];
}

有人知道这是什么原因吗?努力了好几天。。。谢谢

要将选定组合框设置为数据源的选定项,请根据文档使用以下命令:

[self.comboBox selectItemAtIndex:2];
[_comboBox setObjectValue:[self comboBox:_comboBox 
           objectValueForItemAtIndex:[_comboBox indexOfSelectedItem]]];
但是,主要问题是,由于您将数据源设置为“self”,因此需要实现nscomboxDataSource协议。由于“self”的数据源未实现此协议,因此无法正常工作

请注意,在上面的选择器中,当我说[self comboBox:\u comboBox]时,self是您的 数据源对象

可以找到此信息。

找到了

您还需要像下面这样实现
indexOfItemWithStringValue

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

它确实在头文件中实现了nscomboxDataSource协议。还有以下代码:[self.combobox selectItemAtIndex:2];[self.combobox setObjectValue:[self-combobox:self.combobox objectValueForItemAtIndex:[self.combobox indexOfSelectedItem]];做同样(错误)的事。谢谢你的评论,但这对我没有帮助。没有在标题中看到,并假设你没有实现。