NSProgressIndicator не исчезнет (определиться) - PullRequest
0 голосов
/ 03 ноября 2011

У меня есть определенный индикатор прогресса. Он работает так, как я ожидал, но он не исчезает после достижения значения maxValue. Я установил индикатор прогресса, чтобы он не отображался при остановке в файле main.nib, я также ввел его в метод awakeFromNib {}. Я поместил журнал в конце процедуры, чтобы убедиться, что для параметра [displayWhenStopped] все еще задано значение NO, и оно установлено.

Вот мой код:

-(void)getEvents:(NSURL *)mffFile{

NSMutableArray * eventTypeResults =[[NSMutableArray alloc]init];

EWaveformRecording  *ptrToRcdFile = [EWaveformRecording openRecording:mffFile permission:readOnly user:nil convertFileFormat:NO openReadOnlyAnyway:NO];
NSArray *events = [ptrToRcdFile getEvents];
//get the size of events for the progressbar and instantiate a loop counter
NSInteger total = [events count];
int loop = 0;

//set progress bar params
[self->meter_ setUsesThreadedAnimation:YES];
[self->meter_ setControlSize:NSMiniControlSize];
[self->meter_ setMaxValue:(double)total];

for(EEvent* event in events){
    loop ++;
    if(![eventTypeResults containsObject:event.code]){
     NSLog(@"check eventNames in getEvents %@", event.code);
     [eventTypeResults addObject: event.code];
    }//end if
//display loop increment in progress bar
[self->meter_ setDoubleValue:(1000*(double)loop)/1000];
}//end for

//send the eventTypesResults array to the EventExport class
[evtPtr setEventsAvailableList:eventTypeResults];
 }

Что я пробовал:

с и без [setUsesThreadedAnimation], что я не совсем понимаю; он замедляет индикатор выполнения, что делает его лучше, но в документах говорится, что анимация должна влиять только на неопределенные типы.

Я пытался использовать [запустить и остановить анимацию] Я попытался [setDisplayWhenStopped: NO] после моего цикла

Любая помощь с благодарностью MIke

1 Ответ

0 голосов
/ 03 ноября 2011

Это то, что я узнал.

Я не должен позволять индикатору выполнения работать в другом потоке, даже если он выглядит так, как будто он работает, потому что NSProgressIndicator больше не может отвечать на настройки в основном потоке, поэтому правильнее всего не создавать метод, однако, это не было решением моей проблемы; Я делал все остальное правильно, но основной поток не мог перерисовать прогресс, потому что он занят всеми другими вызовами в пользовательском интерфейсе. Решением было реализовать NSRunLoop так, чтобы каждая итерация цикла прерывала основной поток и перерисовывала индикатор выполнения, а затем возвращала управление.

...