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數組作爲其值的字典。我無法正確收集響應。當我放置斷點時,它正常工作,但沒有斷點,它沒有給出正確的結果
當我把斷點處:
- 行號10.SFRestAPI.sharedInstance()sendRESTRequest(requestForGrandChilds,
- 行號23.counter + = 1
的dataOfGrandChilds字典中的數據正確設置,當刪除斷點並執行dataOfGrandschilds中的數據時,設置不當(即對於其他某個鍵,其他值正在設置)
請幫我一把。
您在同一時間發出多個異步網絡操作。不能保證他們將完成哪個命令並且字典不是線程安全的,因此腐敗幾乎得到保證。當你使用調試器的時候,你會放慢速度,並且一次強制完成一項操作。 – Paulw11
你能否給我建議更好的方法@ Paulw11 –
@ Paulw11,嘿,我以一種更簡單的方式做到了。 我發送完整數據的請求並將其存儲在一個字典數組中,並在一個單獨的函數中過濾數據。如果您在下面提供答案,我會很高興。提前感謝 –