使用NSComboBox的自定义数据源不显示任何内容

时间:2011-04-22 20:45:33

标签: cocoa datasource nscombobox

问候我试图在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];

在上一个操作之后,组合框中没有显示任何内容,我做错了什么?

3 个答案:

答案 0 :(得分:1)

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

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

2)尝试初始化“values”数组,如下所示:

values = [NSMutableArray array];

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

如果你坚持使用alloc-init方法,你应该以这种方式创建一个单独的临时数组,将其分配给“values”,然后释放它。否则,既然你已经将“值”置于“保留”状态,那么你将保留两次。

3)尝试在c_box调用结束时添加此行:

[c_box reloadData];

每当您更改数据源阵列时,请再次调用它。

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

希望有所帮助。

答案 1 :(得分:0)

好的,我找到了问题,按自定义数据源类的顺序工作你需要

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

答案 2 :(得分:0)

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

8组合框工作正常,但2没有。我不知道我做错了什么以及其他人为什么工作。我想这个问题大约2个星期。我正在尝试删除并使用不同的步骤创建新的,但没有任何帮助。

解决方案是在从nib唤醒select选项之前重新加载数据。

[_myCombo reloadData];