Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json 在swift中实现呼叫同步_Json_Swift - Fatal编程技术网

Json 在swift中实现呼叫同步

Json 在swift中实现呼叫同步,json,swift,Json,Swift,我试图将json文件中的数据加载到表视图单元格中,但问题是它加载了一个空单元格,因为所检索的数据尚未完成加载。我假设我必须使呼叫同步,但不确定如何同步。请帮忙 class func getTopAppsDataFromItunesWithSuccess(success: ((iTunesData: NSData) -> Void)) { //1 loadDataFromURL(NSURL(string: TopAppURL)!, completion:{(data, err

我试图将json文件中的数据加载到表视图单元格中,但问题是它加载了一个空单元格,因为所检索的数据尚未完成加载。我假设我必须使呼叫同步,但不确定如何同步。请帮忙

class func getTopAppsDataFromItunesWithSuccess(success: ((iTunesData: NSData) -> Void)) {
    //1
    loadDataFromURL(NSURL(string: TopAppURL)!, completion:{(data, error) -> Void in
        //2
        if ((data) != nil) {
        if let urlData = data {
            //3
            success(iTunesData: urlData)
        }
        }
    })
}


class func loadDataFromURL(url: NSURL, completion:(data: NSData?, error: NSError?) -> Void) {
    var session = NSURLSession.sharedSession()

// Use NSURLSession to get data from an NSURL
let loadDataTask = session.dataTaskWithURL(url, completionHandler: { (data: NSData!, response: NSURLResponse!, error: NSError!) -> Void in
    if let responseError = error {
        println("error")
        completion(data: nil, error: responseError)
    } else if let httpResponse = response as? NSHTTPURLResponse {

        if httpResponse.statusCode != 200 {
            var statusError = NSError(domain:"com.raywenderlich", code:httpResponse.statusCode, userInfo:[NSLocalizedDescriptionKey : "HTTP status code has unexpected value."])
            completion(data: nil, error: statusError)
        } else {

            completion(data: data, error: nil)
        }
    }
})

loadDataTask.resume()


}
这就是我提出请求的地方

class func allCats() -> Array<Animal> {

    var animalArray = Array<Animal>()

       DataManager.getTopAppsDataFromItunesWithSuccess { (iTunesData) -> Void in
...
class func allCats()->数组{
var animalArray=Array()
DataManager.getTopAppsDataFromItunesWithSuccess{(iTunesData)->中的Void
...

无需使其同步。一种方法是在请求进行时显示活动指示器,然后在完成块中隐藏微调器并重新加载表。