如何使操作等到其他操作在swift中完成

时间:2015-12-03 10:40:58

标签: ios xcode swift

我正在处理从api获取数据的应用程序 我使用alamofire获取数据 我的问题是如何使应用程序等待数据提取完成

我使用以下代码来获取数据

class abc:NSOperation{

static let sharedInstance = abc()

func main() {

    Alamofire.request(.GET, "http://playground.dzireinfotech.com/admin/event/getallevents", parameters: nil).response{
        (request, response, data, error) in

        if(error == nil){
            let jsn = JSON(data: data!)

            if let nn = jsn.array{
                let a = nn.count
                print("a\(a)")
                for(var i=0; i<a; i++){
                    self.e_Id.append(jsn[i]["e_id"].string!)
                    self.e_date.append(jsn[i]["e_date"].string!)
                    self.e_time.append(jsn[i]["e_time"].string!)
                    self.e_title.append(jsn[i]["e_title"].string!)
                    self.e_image.append(jsn[i]["e_image"].string!)
                    self.e_description.append(jsn[i]["e_description"].string!)
                    self.e_num_table.append(jsn[i]["e_num_table"].string!)

                    self.imgx.append(self.ImgURL + (jsn[i]["e_image"].string!))
                    // self.e_latitude.append(jsn[i]["e_latitude"].string!)
                    // self.e_longitude.append(jsn[i]["e_longitude"].string!)
                    //self.e_status.append(jsn[i]["e_status"].string!)
                }

            }

            if(self.imgx.count>0){
                FirstViewController.sharedInstance.loadData(self)
            }

        }else{
            print("Error")
        }
    }
}

上面的代码工作正常,但它在下面的代码中给出了问题

class pqr: UIViewController{

  override func viewDidLoad() {

    super.viewDidLoad()

    abc.sharedInstance.main()
    //I want to make wait here
    imageUrls = abc.sharedInstance.imgx
    let ab =  abc.sharedInstance.img_number
    print("ImageUrl\(imageUrls)")
    print("Image Number\(ab)")
    let urlx:NSURL = NSURL(string: imageUrls[ab])!
    self.imageView.sd_setImageWithURL(urlx)
  }
}

2 个答案:

答案 0 :(得分:0)

viewDidLoad中依赖于长时间运行操作的所有代码移动到另一个方法,然后在长时间运行的进程的完成处理程序中调用该方法。

答案 1 :(得分:0)

您可以将所有这些代码放入viewdidload中,以便应用程序在该代码运行完毕之前不会打开。

您是否正在努力使应用程序停留在启动屏幕上,直到获取数据为止。

如果我是正确的,你应该把代码放在应该说的viewdidload函数中。

视图确实出现了然后在放置代码纠正我如果我错了我是新来的。

您可以分享代码的顶部。