2

问候我在尝试在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)连接起来,并设置了 datasource (CComboDatasource* data_source)

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

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

4

3 回答 3

1

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

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

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

values = [NSMutableArray array];

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

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

3) 尝试在 c_box 调用的末尾添加这一行:

[c_box reloadData];

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

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

希望有帮助。

于 2011-04-23T00:56:31.703 回答
0

好的,我发现了问题,为了让您需要的自定义数据源类工作

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

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

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

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

[_myCombo reloadData];
于 2014-03-01T13:34:11.330 回答