问候我试图在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];
在上一个操作之后,组合框中没有显示任何内容,我做错了什么?
答案 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)
好的,我找到了问题,按自定义数据源类的顺序工作你需要
答案 2 :(得分:0)
我有comboBox的问题:objectValueForItemAtIndex:因为我有10个组合框,每个组合框我检查: if(aComboBox == _myCombo)
8组合框工作正常,但2没有。我不知道我做错了什么以及其他人为什么工作。我想这个问题大约2个星期。我正在尝试删除并使用不同的步骤创建新的,但没有任何帮助。
解决方案是在从nib唤醒select选项之前重新加载数据。
[_myCombo reloadData];