2014-03-07 18 views
0

我已經創建了一個iPad應用程序,它在內部加載大量媒體,可以凍結用戶界面幾秒鐘(特別是在較舊的iPad上)。我正在探索異步並添加一個微調器,但是我無法確定微調器在新的ViewController打開之前啓動的正確位置。任何幫助appreaciated。緩慢的用戶界面更新,添加微調器

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 

[activityIndicatorObject startAnimating]; 

dispatch_queue_t downloadQueue = dispatch_queue_create("downloader", NULL); 
dispatch_async(downloadQueue, ^{ 

    understandingViewController *destViewController = segue.destinationViewController; 
    destViewController.itemNumber = num1; 
    destViewController.selectedItem = num1; 

    dispatch_async(dispatch_get_main_queue(), ^{ 
     [activityIndicatorObject stopAnimating]; 
    }); 

}); 

}

回答

2

使用ViewDidLoad在destinationViewController添加activityIndi​​cator和startAnimating。

,並在viewDidLoad中,加載數據在後臺線程

所以像這樣

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // add activity indicator 
    // start animating 

     dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0ul); 
    dispatch_async(queue, ^{ 
     // Perform non main thread operation 
     // load data 
     dispatch_sync(dispatch_get_main_queue(), ^{ 
      // perform main thread operation 
     }); 
    }); 
} 
+0

但是當微調框出現時,哪個視圖會在後臺? – Bachzen

+0

目標視圖控制器視圖將可見 – Shubhank

+0

唯一的問題是當前我正在看到當前ViewController上的UI凍結而非目標。 – Bachzen

0

你聽起來困惑。視圖控制器不是「在後臺」。 CODE在後臺運行。您不應該在prepareForSegue中進行異步調用。

我建議完全跳過對dispatch_async()的調用。相反,看看使用NSURLConnection的sendAsynchronousRequest:queue:completionHandler:方法。這將允許您在連接完成後提交連接請求(傳遞給隊列參數的主隊列)以及您想要執行的代碼塊。系統會異步執行下載並在完成時通知您。

+0

我沒有連接到URL,如果仍然使用? – Bachzen

+0

那麼你在做什麼呢? –

+0

我在目的地加載大量圖像 – Bachzen