我使用searchBar(使用searchDispalyController)实现了tableView,用户可以输入搜索词,表格视图显示哪些故事包含此搜索词。点击单元格后,pageBasedView将推送到包含文本的视图,用户可以卷曲页面。 (该应用程序是一本书)。
繁重的任务是将一个巨大的文本截断为一小部分并将它们添加到数组中的方法。
因此,当用户点击单元格时,截断的负担将转移到pageBasedViewController。截断完成并准备好导航页面需要几秒钟。
在这几秒钟内,我想展示一个使用MBProgressHud的activityIndicator。
当点击一个单元格时,问题就出现了,在新页面进入视图之前,activityIndicator不会出现。
[MBProgressHUD showHUDAddedTo:self.view animated:YES];
dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
//the heavy task
[self truncate:contentString];
dispatch_async(dispatch_get_main_queue(), ^{
[MBProgressHUD hideHUDForView:self.view animated:YES];
});
});
这是一个screenShot,显示了app的流程:
我很惊讶为什么我看不到ActivityIndicator!删除此代码后:
[MBProgressHUD hideHUDForView:self.view animated:YES];
向后滑动到masterViewController并再次点击单元格过程需要几秒钟,并且令人惊讶地看到指示器正在工作!但我很惊讶为什么它第一次不起作用?
从中午到午夜,我正在努力。但没有解决方案!我上传了示例应用 从这里下载:(67 KB)
http://www.mediafire.com/download/decvu7uig9r6v1a/pageBasedApp.zip
答案 0 :(得分:1)
您的代码正在显示HUD,然后立即将其删除。
显示HUD,然后设置在后台线程上运行的任务,然后在任务完成之前删除HUD。
我建议在您的方法中添加一个完成块,以便您知道它何时完成,然后移除HUD。
更好的做法是将您的方法放在第一个控制器中并在显示HUD时调用它,然后推送到最终控制器。不需要中间人。
答案 1 :(得分:1)
解决。 我这样做:并在收到信号量后: 。 。
[MBProgressHUD showHUDAddedTo:[[[UIApplication sharedApplication] windows] objectAtIndex:1] animated:YES];
sema = dispatch_semaphore_create(0);
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate distantPast]];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
//here we do the heavy job
[self truncate:contentString];
});