我有一个确定的进度指标。它正如我所期望的那样工作但它在达到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],我不完全理解;它确实减慢了进度条,使其看起来更好,但文档说只有不确定的类型应该受到动画的影响。
我尝试过使用[start& amp;停止动画] 我在循环
之后尝试过[setDisplayWhenStopped:NO]非常感谢任何帮助 麦克
答案 0 :(得分:0)
这就是我所学到的。
我不应该允许进度条在不同的线程上运行,即使它看起来像它的工作,因为NSProgressIndicator不能再响应主线程中的设置,所以正确的做法是不实例化然而,这不是解决我问题的方法;我正在做其他一切正确,但主线程无法重绘进度,因为它忙于UI中的所有其他调用。解决方案是实现NSRunLoop,以便循环的每次迭代都会中断主线程并重绘进度表,然后返回控制。