我有问题。当我的应用程序启动时,它会从应用程序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
任何人都知道该怎么做?