ios - ActivityIndi​​cator 在计算后不会停止

标签 ios objective-c cocoa-touch uiactivityindicatorview

我试图在上传文件时制作事件指示器,所以我找到了很多解决方案,但我想我并不完全理解它们,所以我的代码如下所示:

- (void) startSpinner {

UIActivityIndicatorView  *spinner = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
[spinner setCenter:CGPointMake(self.view.frame.size.width/2.0, self.view.frame.size.height/2.0)];
[self.view addSubview:spinner];
[spinner startAnimating];

}


- (void)startSync {

[NSThread detachNewThreadSelector:@selector(startSpinner) toTarget:self withObject:nil];

// computations 

[self.spinner stopAnimating];
} 

所以在我执行 [self startSync] activityIndi​​cator 后出现,但在上传后它并没有停止。此外,如果我在其他地方(不在 (void)startSpinner 中)声明事件指示器,例如在 viewDidLoad 中,并且只执行 [self startAnimating],它根本不会出现。请帮我找出错误。

最佳答案

您正在非主线程的线程上执行 UI 操作。 您永远不应使用执行 UI 相关任务的选择器调用 detachNewThreadSelector

更好、更容易理解的方法是:

dispatch_async(dispatch_get_main_queue(), ^{
    [self.activityIndicator startAnimating];
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        //Perform lengthy operations
        dispatch_async(dispatch_get_main_queue(), ^{
            [self.activityIndicator stopAnimating];
        });
    });
});

此外,如果您选择使用选择器 - 请确保您的 UIActivityIndi​​catorView 声明在该方法的范围之外。

关于ios - ActivityIndi​​cator 在计算后不会停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14702698/

相关文章:

ios - 未加载 InHouse/Enterprise 应用程序的 Cocoa Touch 框架

ios - 前向声明问题 - ARC 重构

objective-c - SKLabelNode 定位未按预期工作

ios - UISearchController 搜索栏不隐藏导航栏

ios - 无法在 viewDidLoad 方法中获取传递的数据

objective-c - 应用程序被拒绝 : crashes on launch , 但在所有设备上对我来说也能正常工作

objective-c - 永恒滚动的 UITableView

ios - 如何回到 Root View Controller

ios - 在应用程序之间共享 iCloud 文档

iPhone 用户界面自动化 : Dynamically Added UI Elements Not Displayed When Executing logElementTree()