1

基本的に8000のユーザー名のリストであるplistがあります。これを NSDictionary にロードし、次にソートされたキーの配列 (取得時にリストがソートされていないため) をロードし、NSComboBox へのロードをループします。

これは機能しますが、コンボ ボックスに入力するのに数秒かかる場合があります。

これが私のコードです:

// in my .h
IBOutlet NSComboBox *comboUserList; // which is connected to a combo box in my .xib

// in my .m

// userInfoPlist is an NSString path to the file
NSDictionary *userList = [NSDictionary dictionaryWithContentsOfFile:userInfoPlist];

// sort user info into an array

NSArray* sortedKeys = [userList keysSortedByValueUsingSelector:@selector(caseInsensitiveCompare:)];

// then populate the combo box from userList in the order specified by sortedKeys

for ( NSString *usersKey in sortedKeys) {
    [comboUserList addItemWithObjectValue:[userList objectForKey:usersKey]];
}

したがって、これは機能しますが、8000 個の奇数のエントリの場合、コンボ ボックスに入力するのにかなりの時間がかかります (2011 MAcBook Air では 1 ~ 2 秒ですが、それでも目立ちます)。NSDictionary または NSArray を for ループではなく、データ ソースとして使用するより高速な方法はありますか?

4

3 に答える 3

1

ユーザー外部データ ソース。

[mEmailListBox setUsesDataSource:YES];
[mEmailListBox setDataSource:self];  
/*
If you use setDataSource: before setUsesDataSource:, setDataSource: throws an exception.
*/
- (NSInteger)numberOfItemsInComboBox:(NSComboBox *)aComboBox;
{
    return [DatSource count];//DatSource NSArray
}
- (id)comboBox:(NSComboBox *)aComboBox objectValueForItemAtIndex:(NSInteger)index;
{
    return DatSource[index];
}  

コンボ ボックス プログラミングのトピックを参照してください。

noteNumberOfItemsChangedおよびreloadDataメソッドを使用してバックグラウンドでデータをロードすることもできます

于 2013-08-12T08:55:50.667 に答える
0

値を直接指定するのではなく、データ ソースを使用する必要があります。-[NSComboBox setUsesDataSource:]とを使用し-[NSComboBox setDataSource:]てデータソースを設定NSComboBoxDataSourceし、コントローラーにプロトコルを実装します。

参照: https://developer.apple.com/library/mac/documentation/Cocoa/Reference/ApplicationKit/Protocols/NSComboBoxDataSource_Protocol/Reference/Reference.html#//apple_ref/occ/intf/NSComboBoxDataSource

于 2013-08-12T06:15:09.750 に答える
0

キーを並べ替えて NSComboBox に値を入れるときに、このコードのような動作が必要ない場合は、別の方法で行うことができます。

ソートされたキーまたは値を配置しても問題ない場合は、ループする代わりに 1 つの呼び出しを使用できます。

[comboUserList addItemsWithObjectValues:sortedKeys];
于 2013-10-21T18:01:39.527 に答える