ios swift程序流

ios swift程序流,ios,json,swift,flow,Ios,Json,Swift,Flow,在我的mainviewcontroller的viewDidLoad方法中,我启动了几个进程 let api = JsonData() // create instance of JsonData class api.loadJson(nil) // this method receives json and writes it in the file. //Function to find file location func getFileUR

在我的mainviewcontroller的viewDidLoad方法中,我启动了几个进程

        let api = JsonData() // create instance of JsonData class
        api.loadJson(nil) // this method receives json and writes it in the file.

    //Function to find file location
    func getFileURL(fileName: String) -> NSURL {
        let manager = NSFileManager.defaultManager()
        let dirURL = manager.URLForDirectory(.DocumentDirectory, inDomain: .UserDomainMask, appropriateForURL: nil, create: false, error: nil)
        return dirURL!.URLByAppendingPathComponent(fileName)
    }
         //file with this name was created in loadJson method
        let filePath = getFileURL("JSONFromServer.txt").path!

   //trying to read this file
 let newDictionary = NSKeyedUnarchiver.unarchiveObjectWithFile(filePath) as! [Dictionary <String,AnyObject> ]
loadJson函数将完成处理程序作为参数,但完成后loadJson函数不会调用它。先把它修好


然后在viewDidLoad函数中,在调用loadJson时传入一个完成处理程序。您提供的完成代码是您应该阅读和处理loadJson保存的文件的地方。

不幸的是,我不知道您在哪里,否则我会来到您的办公室,回头看看您在说什么。既然我不能,你能告诉我们JsonData从哪里来等等,因为您在这里提供的信息毫无用处。很可能JSON数据的下载是异步完成的,因此您无法在调用loadJson后立即尝试读取该文件。有太多具有类似命名方案的JSON库,因此无法猜测您使用的是哪一个。抱歉。检查更新的问题。希望它现在有意义不。您需要告诉我们您正在使用哪个JSON库,并提供指向该库信息的链接。正如其他人所建议的,JSON库的loadJson调用很可能是异步运行的,但是如果没有更多的信息,我们就无法判断了!在我吃午饭的时候,OP终于提供了足够的信息来解决这个问题,所以你抢先找到了答案!投票
import Foundation

class JsonData {

    var bankDict  = [Dictionary <String,AnyObject> ]()
    var arrayOfBanks: [[String:AnyObject]] = []

    func loadJson(completion: ((AnyObject) -> Void)!) {

        var urlString = "http://almaz.com/getjson.php"

        let session = NSURLSession.sharedSession()
        let sourceUrl = NSURL(string: urlString)

        var task = session.dataTaskWithURL(sourceUrl!){

            (data, response, error) -> Void in

                if error != nil {
                    println(error.localizedDescription)
                } else {

                    var error: NSError?

                    var jsonData = NSJSONSerialization.JSONObjectWithData(data, options: .MutableContainers, error: &error) as! NSArray

                    //println(jsonData)


                    //convert from JSON into array of dictionaries
                    var rates = [ExchangeRates]()  //instance of class Rate
                    var bnkDct  =  ["bank": "", "currency": "","buyrate": "", "sellrate": ""] //template
                    var indx : Int = 0 //index for iteration

                    for rate in jsonData{
                        let rate = ExchangeRates(rate as! NSDictionary)

                        rates.append(rate)

                            bnkDct["bank"] = rates[indx].bank
                            bnkDct["buyrate"] = rates[indx].buyRate
                            bnkDct["sellrate"] = rates[indx].sellRate
                            bnkDct["currency"] = rates[indx].currency

                        self.bankDict.append(bnkDct)
                        indx += 1
                }

                //println(self.bankDict)



                //Store data in file
                //File path and name
                if let dirs : [String] = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.AllDomainsMask, true) as? [String] {
                        let dir = dirs[0] //documents directory
                        let filePath = dir.stringByAppendingPathComponent("JSONFromServer.txt");

                    NSKeyedArchiver.archiveRootObject(self.bankDict, toFile: filePath)
                   // println(filePath)
                    }


            }
        }

        task.resume()
    }
}