objective-c - NSComboBox - 获取选定的信息和 NSComboBoxDataSource

标签 objective-c cocoa macos nscombobox

在我的一生中,NSComboBox 一直困扰着我。

我创建了一个符合 NSComboBoxDataSource 协议(protocol)的对象,并实现了:

- (NSInteger)numberOfItemsInComboBox:(NSComboBox *)aComboBox;
- (id)comboBox:(NSComboBox *)aComboBox objectValueForItemAtIndex:(NSInteger)index;

我将 NSComboBox 的实例设置为使用数据源,并将此对象设置为源。效果很好,我的实现返回项目数,并返回特定索引处项目的 NSString 值。

然后我决定在选择某项时执行某项操作,这就是我的问题开始的地方。 NSComboBoxDataSource 协议(protocol)中没有可重写的明显方法来处理组合框中项目的选择。

所以,我也让我的对象符合 NSComboBoxDelegate 并实现:

- (void)comboBoxSelectionDidChange:(NSNotification *)notification;

不幸的是,与选择时的 NSTableView 不同,通知的对象是 NSComboBox 而不是所选项目的对象。 “好吧”我告诉自己,我将调用 NSComboBox 方法:

- (id)objectValueOfSelectedItem;

这应该会返回选中的项目,我可以从那里开始。但是,仅当 usesDataSource 设置为 NO 时才调用该方法,而我的情况并非如此。当我使用它时警告开始飞行。

所以,我的问题是,当您使用数据源时,处理 NSComboBox 选择的正确方法是什么?

最佳答案

我想你想要indexOfSelectedItem而不是 objectValueOfSelectedItem。然后,由于您是数据源,您应该能够调用自己的 comboBox:objectValueForItemAtIndex: 方法。

关于objective-c - NSComboBox - 获取选定的信息和 NSComboBoxDataSource,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1712515/

相关文章:

ios - 如何弹出回到 Root View Controller 然后推送到不同的 View ?

objective-c - 如何从 Cocoa 中的 NSData 获取编码字符串?

javascript - 如何在 Mac 上设置 ReactJS?

macos - 如何加速以下 sed 命令

ruby - xapian-full 安装在 mac os x snow leopard 上但因 dlopen LoadError 而失败

objective-c - IKImageView调整大小问题

objective-c - cocoa NIB : Custom EN Localisation

CSS 打印 : Avoiding cut-in-half DIVs between pages?

iphone - 我如何找出我的应用程序在 UIPasteboard 中被 SIGKILLed 的原因?

objective-c - 核心数据过度使用?