问候我在尝试在
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];
执行前面的操作后,组合框中没有显示任何内容,我做错了什么?
你所拥有的对我来说基本上是正确的。我可以想到一些你可以尝试的事情:
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 方法),并将“值”放入此控制器类中,或者让此类访问“值”。
希望有帮助。
好吧,我发现了问题,为了通过自定义数据源类来工作,你需要
我对comboBox有同样的问题:objectValueForItemAtIndex:因为我有10个组合框,我检查的每个组合框: if (aComboBox == _myCombo)
8 个组合框工作正常,但 2 个组合框不行。我不知道自己做错了什么,也不知道为什么别人能成功。经过大约两周的思考这个问题,我找到了解决方案。
解决方案是在从笔尖唤醒中选择选项之前重新加载数据。
[_myCombo reloadData];