當我通過網絡發送一個網絡請求時,我在一個完成塊中得到結果。在這個塊中,我解析並使用那個類的委託,我告訴視圖控制器檢查數據。從線程錯誤調用委託方法
VC在表視圖上調用reloadData。唯一的是,如果我使用委託reloadData命中或錯過(有時它的工作原理)。但是,如果我發佈通知,那麼它可以很好地工作。
我認爲這個問題與從afNetworking塊調用的委託有關,因爲它位於不同的線程上。我不把它放在那裏,但我認爲AFN會自動多線程化請求。
爲什麼會發生此問題?
當我通過網絡發送一個網絡請求時,我在一個完成塊中得到結果。在這個塊中,我解析並使用那個類的委託,我告訴視圖控制器檢查數據。從線程錯誤調用委託方法
VC在表視圖上調用reloadData。唯一的是,如果我使用委託reloadData命中或錯過(有時它的工作原理)。但是,如果我發佈通知,那麼它可以很好地工作。
我認爲這個問題與從afNetworking塊調用的委託有關,因爲它位於不同的線程上。我不把它放在那裏,但我認爲AFN會自動多線程化請求。
爲什麼會發生此問題?
@Durgaprasad是對的。可能是他的副本。還在給它添加一些條件。試試吧,
if ([NSThread isMainThread])
{
[self.tableView reloadData];
}
else
{
[self.tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:YES];
}
好的,我會試試這個。不會dispatch_async到主線程工作嗎? –
儘管我對GCD沒有太多的知識,但它仍然可以工作。 –
我認爲你稱爲二級線程上的網絡連接。並從那個調用[tableView reloadData];
這將讓崩潰,因爲你不能改變任何其他線程的用戶界面。你需要使用主線程。試試這個。
[self.tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:YES];
我先回答了。和它的正確。仍然沒有接受或+1。 ÿ? – Durgaprasad
你在secondary thread上調用afnetworking? – Durgaprasad
不,我想他們multiThread對我來說 –
UI操作必須在主線程中執行。這是問題嗎? – Raj