我的应用程序上有 3 个屏幕。首先是登录。第二是搜索,第三是处理任务。登录时,我从 Web 服务中检索数据。它以 XML 格式返回数据。所以数据相当大。因此,我在这样的后台线程上执行该任务,以阻止 Mainthread 冻结在我身上:
-(BOOL)loginEmp
{
.....some computation
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,
(unsigned long)NULL), ^(void) {
[self getAllCustomerValues];
});
}
-(void)getAllCustomerValues
{
....more computation.Bring the data,parse it and save it to CoreData DB.
//notification - EDIT
NSNotification *notification =[NSNotification notificationWithName:@"reloadRequest"
object:self];
[[NSNotificationCenter defaultCenter] postNotification : notification];
}
//EDIT
//SearchScreenVC.m
- (void)viewDidLoad
{
....some computation
[self.customerActIndicator startAnimating];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(stopActivityIndicator)
name:@"reloadRequest"
object:nil];
}
- (void)stopActivityIndicator
{
[self.customerActIndicator stopAnimating];
self.customerActIndicator.hidesWhenStopped = YES;
self.customerActIndicator.hidden =YES;
NSLog(@"HIt this at 127");
}
因此,在登录成功的情况下,我转到屏幕 2。但后台线程仍在处理中(我知道,因为我有日志记录值)。我想要一个活动指示器显示在这里(第二个屏幕)告诉用户在他开始搜索之前等待。那么我该怎么做呢?如何让我的活动指示器监听/等待后台线程。如果您需要更多信息,请告诉我。谢谢
编辑:所以我进行了相应的编辑,但通知永远不会被调用。我在 getAllCustomerValues 的末尾放置了一条通知,并在 SearchScreen 的 viewDidLoad 中使用了它。第二个屏幕上停止动画的通知永远不会被调用。我在做什么错?谢谢
编辑2:所以它终于达到了方法。我不知道是什么让它达到了这种方法。我放了一个断点。我写了停止动画,但它不会。我把 hidesWhenStoppped 和 hidden 都写成了 YES。但它仍然保持动画。我如何让它停止?