如何使用swift中的主线程同步异步数据下载

时间:2016-07-28 12:19:00

标签: ios swift multithreading asynchronous swift2

我有问题。当我的应用程序启动时,它会从应用程序Delegate中的服务器下载异步数据,但它会进入主屏幕。然后在主屏幕中,应用程序检查已在app delegate中下载的此异步数据。如果它没有找到该数据,那么它会加载离线内容,因为这些数据可能还没有准备好,或者服务器可能已经关闭,应用程序永远不会获得这些数据。

我的问题出现在有效的应用下载该数据但是在加载离线数据之后。我得到一个装有离线数据的主屏幕,但与新数据混合在一起。

在app delegate中我已经在核心位置委托方法中设置了下载异步数据,因为只有在用户授予对应用程序的位置访问权限时才会下载此数据:

func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]){
    if(hasBeenLaunched == false){
        hasBeenLaunched = true
        dispatch_async(dispatch_get_main_queue()){
            self.loadCitySlugArray()

        }
    }
    //Other code...

}

当应用程序进入下载方法时,我将hasBeenLaunched Bool设置为true,然后在主屏幕中检查它:

 override func viewDidLoad() {
        if(hasBeenLaunched == false){
            //async data hasn't been downloaded from the server
            //load data to work offline or without location access
            let appDelgte = AppDelegate()
            appDelgte.loadOfflineSlug()
        }
        else//need to download home screen image
        {
            //Download Home Screen Image
            setHomeScreenImage()
        }

}

我试图在bool检查之前进行睡眠,但它没有用,因为睡眠激活时不会下载异步数据。

var seconds = 0
 repeat{
 sleep(1)
    seconds += 1
    if(seconds >= 5){break}
 }while hasBeenLaunched == false

任何人都知道该怎么做?

0 个答案:

没有答案