0
항목의 수천을 가진 NSPopupButton을 채우는 나는 현재 블록을 다음 코드로 작성하지만,하고... 내가 SQLite는 데이터베이스에서 항목의 수천 메뉴를 채울 필요가 나는 독특한 경우가
메인 쓰레드가 채워지는 동안, 3000 개의 아이템으로 채워짐에 따라 1 분 이상 (처음으로)로드됩니다. ui를 막지 않고 작은 덩어리로 메뉴를로드하는 효과적인 방법이 있습니까?
rules.h
{
IBOutlet NSPopUpButton *rulesSelectionButton;
}
@property (retain) IBOutlet NSPopUpButton *rulesSelectionButton;
rules.m
@synthesize rulesSelectionButton;
와 코드가 단추를 채우는 :
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *selected = [defaults objectForKey:rulesSelectionString];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSString *path = [dbPath stringByExpandingTildeInPath];
__block NSArray *final = [NSArray new];
FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:path];
[queue inDatabase:^(FMDatabase *db) {
FMResultSet *results = [db executeQuery:@"SELECT * FROM rules"];
NSMutableArray *array = [NSMutableArray new];
[array addObject:NSLocalizedString(@"Random...", nil)];
while ([results next]) {
@autoreleasepool {
NSString *title = [NSString stringWithFormat:@"%@ (%@)", [results stringForColumn:@"Organization_Rules"], [results stringForColumn:@"Assignment"]];
[array addObject:title];
}
}
final = [[NSSet setWithArray:array] allObjects];
}];
NSArray *sortedKeys = [final sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];
dispatch_async(dispatch_get_main_queue(), ^{
[rulesSelectionButton removeAllItems];
[rulesSelectionButton addItemsWithTitles:sortedKeys];
[rulesSelectionButton selectItemWithTitle:selected];
});
});
코드에 'NSPopUpButton'이라는 단어가 하나도 표시되지 않습니다. 어쨌든 수천 개의 메뉴 항목을 만드는 것은 좋지 않은 생각입니다. –
rulesSelectionButton은 속성입니다. 관련 코드를 추가했습니다. 수천 개의 메뉴 항목을 메뉴에 넣는 것이 좋지 않을 수도 있지만 여전히 데이터를 표시하는 가장 좋은 방법 인 것처럼해야합니다. – gypsyDev
NSPopUpButton이 수천 개의 항목을 처리하도록 설계되지 않았기 때문에 데이터를 표시하는 가장 좋은 방법이라고 생각하지 않습니다. Apple은 "팝업 메뉴를 사용하여 사용자가 항상 볼 필요가없는 상호 배타적 인 선택을 최대 12 가지까지 제공합니다."라고 말합니다. "많은 항목에 대해 팝업 메뉴 대신 스크롤 목록 사용을 고려하십시오." – Willeke