带有 NSComboBox 的自定义数据源不显示任何内容

问题描述 投票:0回答:3

问候我在尝试在

NSComboBox
中设置数据源时遇到以下问题。

这是我的自定义数据源类:

@interface CComboDatasource : NSObject <NSComboBoxDataSource> {
@private
    NSMutableArray* values;
}
@property (nonatomic,retain) NSMutableArray* values;
-(int)itemCount;

@end


@implementation CComboDatasource
@synthesize values;

- (id)init
{
    self = [super init];
    if (self) {
        // Initialization code here.
        values=[[NSMutableArray alloc] init];

        [values addObject:@"A"];
        [values addObject:@"B"];
        [values addObject:@"C"];
    }

    return self;
}


- (NSInteger)numberOfItemsInComboBox:(NSComboBox *)aComboBox
{
    return [values count];
}

- (id)comboBox:(NSComboBox *)aComboBox objectValueForItemAtIndex:(NSInteger)index
{
    return [values objectAtIndex:index];
}

- (void)dealloc
{
    [values release];
    [super dealloc];
}

@end

稍后在另一个文件中,我将

IBOutlet
NSComboBox
对象 (c_box) 连接,并设置数据源
(CComboDatasource* data_source)

 [c_box setUsesDataSource:TRUE];
 [c_box setDataSource:data_source];
 [c_box setEditable:NO];

执行前面的操作后,组合框中没有显示任何内容,我做错了什么?

cocoa datasource nscombobox
3个回答
1
投票

你所拥有的对我来说基本上是正确的。我可以想到一些你可以尝试的事情:

1) 尝试暂时将“return [values count]”替换为“return 5”,并将“return [values objectAtIndex:index]”替换为“return @”任意字符串“”。如果“任意字符串”出现在组合框中,您就会知道问题出在“值”数组上。

2)尝试像这样初始化“values”数组:

values = [NSMutableArray array];

(这是 NSArray 中提供的一种便捷方法。)

如果您坚持使用 alloc-init 方法,则应该以这种方式创建一个单独的临时数组,将其分配给“值”,然后释放它。否则,由于您已使用“保留”对“值”进行了属性化,因此您将保留它两次。

3)尝试在 c_box 调用末尾添加此行:

[c_box reloadData];

每当您更改数据源数组时,请再次调用此函数。

4)我不明白为什么将数据源类与控制组合框的类分开应该是一个问题,但如果它仍然不起作用,请尝试使拥有组合框出口的窗口/视图控制器成为实现 NSComboBoxDataSource 的类协议(numberOfItemsIn 和 objectValueFor 方法),并将“值”放入此控制器类中,或者让此类访问“值”。

希望有帮助。


0
投票

好吧,我发现了问题,为了通过自定义数据源类来工作,你需要

  1. 创建一个 NSObject 并将其拖到编辑器中
  2. 将类型更改为您的自定义数据源类
  3. 将您的数据源声明为 IBOutlet CustomDatasourceClass* myclass
  4. 将对象与之前的插座连接
  5. 将您的 NScomboBox 数据源(在 IB 设计器中)链接到 CustomDatasourceClass 对象

0
投票

我对comboBox有同样的问题:objectValueForItemAtIndex:因为我有10个组合框,我检查的每个组合框: if (aComboBox == _myCombo)

8 个组合框工作正常,但 2 个组合框不行。我不知道自己做错了什么,也不知道为什么别人能成功。经过大约两周的思考这个问题,我找到了解决方案。

解决方案是在从笔尖唤醒中选择选项之前重新加载数据。

[_myCombo reloadData];
© www.soinside.com 2019 - 2024. All rights reserved.