2011-04-22 45 views
2

问候我有以下问题试图设置一个数据源在NSComboBox自定义数据源与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 

在另一个文件后来我连我的IBOutletNSComboBox对象(c_box),我设置数据源(CComboDatasource* data_source)

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

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

+0

固定代码格式。 – Anne 2011-04-22 20:55:22

回答

1

你有什么看起来基本适合我。我可以想一些你可以尝试的东西:

1)尝试用“return @”任意字符串替换“return [values count]”并用“return 5”替换“return [values objectAtIndex:index]” ”。如果“arbitraryString”然后显示在组合框中,则会知道问题出在“values”数组中。

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

values = [NSMutableArray array]; 

(这是在NSArray中提供了一个方便的方法)

如果你坚持用ALLOC-init方法,你应该做一个单独的临时数组,将其分配给“值”,然后释放它。否则,由于您已将“值”与“保留”相比较,因此您保留了两次。

3)尝试在你c_box调用结束加入这一行:

[c_box reloadData]; 

并且更改了数据源阵列的任何时候,再次调用此。我不明白为什么从控制组合框的类中分离数据源类应该是一个问题,但如果它仍然不起作用,请尝试使拥有组合框的窗口/视图控制器成为类的组合实现NSComboBoxDataSource协议(numberOfItemsIn和objectValueFor方法),并将“值”放入此控制器类中,或者让此类访问“值”。

希望有所帮助。

+0

Re:#2,注意'values = [NSMutableArray array];'与'self.values = [NSMutableArray array]'不同。 OP有正确的初始化;你的,可能会导致崩溃。 – NSGod 2011-04-23 02:55:51

+0

感谢您的答案。我试过1)和3),但是4)但是没有任何事情发生NSMutableArray似乎没问题Iam真的卡在这里,一切似乎都OK我不知道IBOutlets是否有问题 - 与档案负责人 – costas 2011-04-23 08:47:23

+0

@costas:不客气。很高兴您解决了IB设置的问题。 (你可能想在下面检查你的答案,以“接受”完成任务。) – Wienke 2011-04-23 13:28:53

0

好吧,我发现了问题,为了通过自定义数据源类工作u需要

  1. 创建一个NSObject并将其拖动到你的编辑器
  2. 类型更改为您的自定义数据源类
  3. 将您的数据源声明为IBOutlet CustomDatasourceClass * myclass
  4. 将Object与前一个插座连接
  5. 将您的NScomboBox数据源(在IB设计器中)链接到CustomDatasourceClass o bject
0

我有问题,组合框:objectValueForItemAtIndex:因为我有10个组合框,每一个组合框我通过检查: 如果(aComboBox == _myCombo)

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

解决的办法是在从nib唤醒之前选择选项之前重新装入数据。

[_myCombo reloadData];