我在目標c中有兩個類控制器和連接器。控制器要求連接器建立到web服務的連接以獲取一些數據。連接本身是通過委託來實現的。如果數據到達,這個委託會得到一個方法調用。我將委託設置爲連接器本身。 我的問題是我想要控制器調用連接器上的方法,並且此方法立即返回數據。這沒有授權。 我嘗試了多線程和Controller等待,但我只能找到多線程的單一方法:等待在iOS中完成的方法
[NSThread detachNewThreadSelector:@selector(myMethod) toTarget:myClass withObject:nil];
多線程的單一方法是不行的,因爲在連接器的委託方法不能被稱爲,因爲整個Connector類不是線程的。任何人都可以幫我解決這個問題嗎?
編輯:我想補充,我調用接口方法的代碼(這是代碼從控制器):
_data = nil;
dispatch_queue_t myQueue = dispatch_queue_create("my queue", NULL);
dispatch_async(myQueue, ^{
_data = [_soapConnector startRequestWithSOAPMessage:soapMessage];
});
while(!_data){
NSLog(@"waiting");
}
//data arrived successfully here so we can manipulate it
我用你的代碼建議更新了我的問題。但是這沒有幫助。在請求運行期間,我無法在文本字段中輸入任何內容,並且在數據到達之前用戶界面不工作。 – tester
是的,因爲你的while指令正在主隊列上執行! – iSofTom
如果讓線程在while循環中休眠,我可以解決這個問題嗎?我認爲它必須是主線程以外的另一個線程,對嗎? – tester