我正在尝试监视我在后台运行的线程。我需要在完成执行时收到警报。
- (IBAction) btnGreaterTen_clicked :(id)sender{
self.searchDistance = [NSNumber numberWithDouble : 10];
CGRect frame = CGRectMake (120.0, 185.0, 80, 80);
activity = [[UIActivityIndicatorView alloc] initWithFrame: frame];
activity.activityIndicatorViewStyle = UIActivityIndicatorViewStyleGray;
[navigationUpdateFromDetail.window addSubview: activity];
[activity startAnimating];
thread = [[NSThread alloc] init];
[thread start];
[self performSelectorInBackground: @selector (getSetDisplay) withObject:nil];
if(thread.isFinished == YES){
[activity stopAnimating];
}
}
以上代码我尝试不同的设置后才能达到最终结果。我正在尝试动画UIActivityIndicator,同时我使用该方法“getSetDisplay”从网络中获取信息。
功能很好,但活动指标没有出现。我被告知我需要在后台线程和主线程上的动画上运行该过程。我现在的问题是如何监控此过程何时停止活动指示器。提前谢谢你
答案 0 :(得分:4)
你应该从另一个角度考虑问题:你应该让你的“主线程”继续运行,让你的“辅助线程”在完成工作时调用主线程上的选择器。
要完成此操作,您应该使用performSelectorOnMainThread
方法,并从辅助线程中调用它。它的原型是- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait
。您应该将“完成”代码放在方法中,然后执行以下操作:
[self performSelectorOnMainThread:@selector(doneDoingWork) withObject:nil waitUntilDone:NO];
答案 1 :(得分:1)
谢谢你们。我终于得到了一个解决方案,感谢迈克和他的上述评论。
- (IBAction) btnGreaterTen_clicked :(id)sender{
self.searchDistance = [NSNumber numberWithDouble : 10];
[activity startAnimating];
NSLog(@" search value after change %@", [searchDistance description]);
[self performSelectorInBackground: @selector (getSetDisplay) withObject: nil];
}
我使用在主线程上运行的“[activity startAnimating]”启动了活动指示器。然后我在后台线程上使用“performSelectorInBackground”启动了我的方法。在我的“getSetDisplay”方法结束时,我放置了以下语句。
[activity performSelectorOnMainThread: @selector (stopAnimating) withObject:nil waitUntilDone:NO];
这只是说[活动stopAnimating]的另一种方式,它正在主线程上工作。
感谢所有回复的人。