2016-06-07 81 views
1
override func viewDidLoad() { 
    super.viewDidLoad() 
    let request = SFRestAPI.sharedInstance().requestForQuery("SELECT Name,Id FROM Account where parentid='\(self.accountId)'"); 
    SFRestAPI.sharedInstance().sendRESTRequest(request, failBlock: {error in print(error)}, completeBlock: { responce in print(responce) 
     self.dataRows = responce["records"] as! [NSDictionary] 
     var counter = 0; 
     for i in self.dataRows 
     { 
      let requestForGrandChilds = SFRestAPI.sharedInstance().requestForQuery("select Name,Id from Account where parentid='\(i["Id"]!)'") 
      SFRestAPI.sharedInstance().sendRESTRequest(requestForGrandChilds, 
      failBlock: 
      { 
       error in print(error) 
       print("error block") 
      }, 
      completeBlock: 
      { 
       responceChild in 
       self.grandChilds = responceChild["records"] as! [NSDictionary] 
       self.dataOfGrandChilds["\(counter)"] = self.grandChilds 
       print("id of parent \(i["Id"]!) and counter \(counter) and data \(self.dataOfGrandChilds["\(counter)"])") 
       //print(self.dataOfGrandChilds) 
       counter += 1 
       dispatch_async(dispatch_get_main_queue(), 
       { 
        print("Control came to main queue") 
        self.tableView.reloadData() 
       }) 
       print("getting to know\(self.dataOfGrandChilds)") 
      }) 
     } 
    }) 
} 

在第一個請求中,我試圖獲取Id的直接子帳戶。在第一個請求的完成塊中,我試圖獲取盛大的子帳戶。 dataRows具有節標題的數據(它們是直接的子名稱)。 dataOfGrandChilds是將部分編號保存爲鍵並將相應的grandChilds數組作爲其值的字典。我無法正確收集響應。當我放置斷點時,它正常工作,但沒有斷點,它沒有給出正確的結果

當我把斷點處:

  1. 行號10.SFRestAPI.sharedInstance()sendRESTRequest(requestForGrandChilds,
  2. 行號23.counter + = 1

的dataOfGrandChilds字典中的數據正確設置,當刪除斷點並執行dataOfGrandschilds中的數據時,設置不當(即對於其他某個鍵,其他值正在設置)

請幫我一把。

+0

您在同一時間發出多個異步網絡操作。不能保證他們將完成哪個命令並且字典不是線程安全的,因此腐敗幾乎得到保證。當你使用調試器的時候,你會放慢速度,並且一次強制完成一項操作。 – Paulw11

+0

你能否給我建議更好的方法@ Paulw11 –

+0

@ Paulw11,嘿,我以一種更簡單的方式做到了。 我發送完整數據的請求並將其存儲在一個字典數組中,並在一個單獨的函數中過濾數據。如果您在下面提供答案,我會很高興。提前感謝 –

回答

1

從烏拉圭回合中viewDidLoad()數據庫得到完整的數據,並把在[NSDictionary]

然後編寫代碼搜索

相關問題