2013-04-07 161 views
0

我想在我的主线程上的tableview控制器上的子视图中显示一个微调。该视图仅在偶尔显示,并且通常在我的后台线程完成后显示。这里是我的代码:Uiactivityindicator没有在子视图中显示

[self.view addSubview:spinnerView]; 
     [self.view bringSubviewToFront:spinnerView]; 
     self.spinnerView.layer.cornerRadius = 8; 
     self.spinnerView.center = CGPointMake(160, 150); 

     [spinner startAnimating]; 

     dispatch_queue_t downloadQueue = dispatch_queue_create("downloader", NULL); 
     dispatch_async(downloadQueue,^{ 
      dispatch_async(dispatch_get_main_queue(), ^{ 
       [NSThread sleepForTimeInterval:10]; 
       // Add recurring transactions if necessary 
       if (tran.recur.id != 0) { 
        [Utilities addRecurringTransactionsUpToCurrentMonthByTransaction:tran]; 
       } 

       [spinner stopAnimating]; 
       [self dismissViewControllerAnimated:YES completion:nil]; 
      }); 
     }); 
     dispatch_release(downloadQueue); 
    } 
} 
+0

不是一个Xcode的问题。 – 2013-04-07 12:05:17

回答

0

由于所有UI是在主线程运行,则必须调用performSelectorOnMainThread:withObject:waitUntilDone:如下图所示:

[self.view addSubview:spinnerView]; 
    [self.view bringSubviewToFront:spinnerView]; 
    self.spinnerView.layer.cornerRadius = 8; 
    self.spinnerView.center = CGPointMake(160, 150); 

    [spinner performSelectorOnMainThread:@selector(startAnimating) withObject:nil waitUntilDone:NO]; 


    dispatch_queue_t downloadQueue = dispatch_queue_create("downloader", NULL); 
    dispatch_async(downloadQueue,^{ 
     dispatch_async(dispatch_get_main_queue(), ^{ 
      [NSThread sleepForTimeInterval:10]; 
      // Add recurring transactions if necessary 
      if (tran.recur.id != 0) { 
       [Utilities addRecurringTransactionsUpToCurrentMonthByTransaction:tran]; 
      } 

      [spinner performSelectorOnMainThread:@selector(stopAnimating) withObject:nil waitUntilDone:NO]; 

      [self dismissViewControllerAnimated:YES completion:nil]; 
     }); 
    }); 
    dispatch_release(downloadQueue); 
+0

此行为与以前完全相同。微调工作目前在主线上。 – Carl 2013-04-07 19:23:55