Objective c 如何在cocoa中显示nscombobox中的数据?

Objective c 如何在cocoa中显示nscombobox中的数据?,objective-c,cocoa,nscombobox,Objective C,Cocoa,Nscombobox,我的MainMenuIB文件中有一个NSComboBox。 我已经创建了组合框“cb”的出口,并与我的代表建立了连接 我还将委托和数据源与我的委托连接起来 -(void)applicationDidFinishLaunching:(NSNotification *)aNotification { arr=[NSMutableArray arrayWithObjects:@"a",@"b",@"c",@"d",@"e",@"f", nil]; [cb reloadData]; } -(NS

我的MainMenuIB文件中有一个
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];
}
但是当我运行应用程序时,数据不会进入组合框。 请帮帮我,因为我对cocoa编程还不熟悉。
提前感谢。

您可以使用
-addItemWithObjectValue
将对象添加到您的
NSComboBox
中,如下所示:

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

for (int i = 0; i < [arr count]; ++i)
{
    [cb addItemWithObjectValue:[arr objectAtIndex:i]];
}
arr=[NSMutableArray数组,其对象为:@“a”、“b”、“c”、“d”、“e”、“f”、“nil];
对于(int i=0;i<[arr count];++i)
{
[cb addItemWithObjectValue:[arr objectAtIndex:i]];
}

有关详细信息,请参见。

您可以使用
-addItemWithObjectValue
将对象添加到
NSComboBox
中,如下所示:

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

for (int i = 0; i < [arr count]; ++i)
{
    [cb addItemWithObjectValue:[arr objectAtIndex:i]];
}
arr=[NSMutableArray数组,其对象为:@“a”、“b”、“c”、“d”、“e”、“f”、“nil];
对于(int i=0;i<[arr count];++i)
{
[cb addItemWithObjectValue:[arr objectAtIndex:i]];
}

您可以查看更多信息。

从表面上看,您的方法似乎是合理的,但使用可变对象作为实例变量通常是不明智的(原因与您的问题完全无关,我们在此阶段不需要深入讨论)

有两件事可能会引发问题:

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


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

您的方法从表面上看似乎是合理的,尽管使用可变对象作为实例变量通常是不明智的(由于与您的问题完全无关的原因,我们在此阶段不需要讨论)

有两件事可能会引发问题:

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


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

这是一种方法。OP似乎对使用数据源感兴趣,但这是完全可以接受的(而且可以说是更灵活的)。是的,这种方法很简单。这是一种方法。OP似乎对使用数据源感兴趣,但是,这是完全可以接受的(而且可以说是更灵活的)。是的,这种方法很简单。