2011-11-02 62 views
0

我有一个确定的进度指示器。它正如我所期望的那样工作,但它在达到maxValue后不会消失。在main.nib文件中停止时,我已设置进度指示器不显示,我也将其输入到awakeFromNib {}方法中。 我在例程的最后放置了一个日志,以确保[displayWhenStopped]设置仍然设置为NO并且它是。NSProgressIndicator不会消失(确定)

这里是我的代码:

-(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]我不完全理解;它确实减慢了进度条,这使得它看起来更好,但文档说只有不确定的类型应该通过动画来实现。我的循环

任何帮助是极大的赞赏 迈克

回答

0

这是我学到了什么后:

我已经尝试使用[启动&停止动画] 我已经试过[NO setDisplayWhenStopped。

我不应该允许进度条在不同的线程上运行,即使它看起来像它的工作,因为NSProgressIndicator不能再响应主线程中的设置,所以正确的做法是不要实例化但是,这种方法不能解决我的问题;我一切正常,但主线程无法重新绘制进度,因为它忙于UI中的所有其他调用。解决方案是实现NSRunLoop,以便循环的每次迭代中断主线程并重新绘制进度表,然后返回控制权。