Objective c NSCOMBOX中的奇怪错误:使用数据源时selectItemAtIndex无法正常工作
我在NSCOMBOX组件上遇到了一个奇怪的问题。其“selectIndexAtPath”行为会根据数据源的不同而变化: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; @
- “固定”列表会使项目被正确选择,但当我通过单击右侧的箭头按钮打开列表时,它会继续被选择李>
- 使用数据源会使项目被正确选择,但当我通过单击右侧的箭头按钮打开列表时,该项目仍会被选择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]];做同样(错误)的事。谢谢你的评论,但这对我没有帮助。没有在标题中看到,并假设你没有实现。