如何在可可中的nscombobox中显示数据?

时间:2012-05-10 07:02:20

标签: objective-c cocoa nscombobox

我的mainmenunib文件中有NSComboBox。 我创建了一个组合框“ cb ”的插座,并将它与我的代表连接起来 我还将委托和数据源与我的代表联系起来。

-(void)applicationDidFinishLaunching:(NSNotification *)aNotification
{    arr=[NSMutableArray arrayWithObjects:@"a",@"b",@"c",@"d",@"e",@"f", nil];
[cb reloadData];
}

-(NSInteger)numberOfItemsInComboBox:(NSComboBox *)aComboBox{
return arr.count;
}

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

但是当我运行应用程序时,数据不会出现在组合框中。 请帮帮我,因为我是可可节目的新手。 提前谢谢。

2 个答案:

答案 0 :(得分:2)

你的方法看起来很合理,尽管使用可变对象作为实例变量通常是不明智的(原因与你的问题完全无关,我们在这个阶段不需要进入)。

有两件事可能成为可能的问题:

1)你在使用ARC吗?如果没有,arr将从你的下方消失,因为-arrayWithObjects返回一个自动释放的对象而你没有任何东西保留它。如果您使用ARC(我相信Lion上的新项目的默认设置),这不适用于您。另外我希望你会崩溃,而不仅仅是没有数据。

2)更有可能的是,你忘记了-setUsesDataSource:YES,这是告诉NSComboBox是否要查看其数据源或使用@JustinBoo提供的内部内容方法的标志。我相信这默认为NO,这会导致你的确切问题。我目前没有在我面前使用Interface Builder,但是IIRC有一个“使用数据源”复选框,您可以检查该复选框以启用此属性。

答案 1 :(得分:1)

您可以使用-addItemWithObjectValueNSComboBox添加对象,如下所示:

arr = [NSMutableArray arrayWithObjects:@"a",@"b",@"c",@"d",@"e",@"f", nil];

for (int i = 0; i < [arr count]; ++i)
{
    [cb addItemWithObjectValue:[arr objectAtIndex:i]];
}

您可以查看NSComboBox Reference了解详情。