2015-09-30 48 views
0

我有一個從互聯網加載數據的應用程序。從互聯網加載數據時,應用程序正在凍結。加載時是否可以顯示警報視圖?你可以看到上面的didSelectRowAtIndexPath:func。應用程序加載數據並凍結時是否可以顯示警報?

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
     let cell = tableView.cellForRowAtIndexPath(indexPath)! as UITableViewCell 
     let text = cell.textLabel?.text! 
     let indexNumber = towersNameArray.indexOf(text!) 
     PlayData.TowerAddress = towersAddressArray[indexNumber!] //Dataloading 
     PlayData.TowerName = towersNameArray[indexNumber!] //Dataloading 
     if #available(iOS 8.0, *) { 
      let alertController = UIAlertController(title: "Loading...", message: "Please Wait", preferredStyle: .Alert) 
      self.presentViewController(alertController, animated: true, completion: nil) 
      let delay = 2.5 * Double(NSEC_PER_SEC) 
      let time = dispatch_time(DISPATCH_TIME_NOW, Int64(delay)) 
      dispatch_after(time, dispatch_get_main_queue(), { 
       alertController.dismissViewControllerAnimated(true, completion: nil) 
      }) 
      tabBarController?.selectedIndex = 1 


     } else { 
      // Fallback on earlier versions 
     } 



    } 
+2

在主/ UI線程中加載數據是一個壞主意。對數據加載使用異步調用 –

回答

4

您應該加載數據在後臺線程像這樣:

//display an alert here if you need 

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), { 
    //load stuff from internet here, don't display an alert 

    dispatch_async(dispatch_get_main_queue(), { 
     //display an alert here if you need to 
    }) 
}) 

//display an alert here if you need. 

或者:

你可以設置一個計時器,你開始加載內容之前,火災發生後約5秒,並在內容完成後您可以使計時器無效。這樣,如果內容在5秒內不加載,計時器將觸發,如果加載速度更快,計時器將不會觸發。

func load() { 
    self.timer = NSTimer.scheduledTimerWithTimeInterval(5, target: self, selector: "timerDone", userInfo: nil, repeats: false) 
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), { 
     //load stuff from internet here 

     dispatch_async(dispatch_get_main_queue(), { 
      self.timer.invalidate() 
     }) 
    }) 
} 

func timerDone() { 
    //display alert here 
} 
0

要以另一種方式解決這個問題,讓我感動的裝載DATAS從互聯網上部分駁回方法之前派遣一部分。通過這種方式,數據加載時警報會離開(如果我輸入的時間少於加載計時器的時間)

相關問題