2011-04-22 95 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];