我正在使用正在進行異步網絡調用的代理。響應將被處理並作爲參數傳遞給下一行中的方法。代碼插圖低於:在主線程上等待,直到完成一個異步過程?
- (MyClass *) performOperations{
...
...
[self callProxyMethodsTarget:self action:@selector(receivedValue:) withObject:anObject]; //making an asynchronous call here
return response;
}
- (void) receivedValue:(id)response{ ///need this return value from network call to return from performOperartions
...
...
}
我的問題是,作爲代理方法進行異步網絡調用,我不能夠及時得到響應返回。
我已經想到了很多事情,比如:
- 使網絡調用同步但這需要大量的返工,並可能引入不可預見的問題
- 改變返回類型,並通過從receivedValue響應,但不能這樣做,因爲我的客戶已經定義了這些方法的名稱和返回類型以及其他平臺上的團隊使用的是同步調用
我還以爲像一個解決方案:
- (MyClass *) performOperations{
...
...
[self callProxyMethodsTarget:self action:@selector(receivedValue:) withObject:anObject]; //making an asynchronous call here
///write a code here to wait until response is received
return response;
}
- (void) receivedValue:(id)response{ ///need this return value from network call to return from performOperartions
...
...
}
但未能如願。
確定代理方法有委託方法(我聲明名稱爲)receivedValue:表示網絡調用已完成。我不明白你在答案中所說的內容,你能否用代碼稍微演示一下。您可以將我的代碼修改爲演示。 – 2010-12-16 06:32:43
問題是在返回類型我的朋友。在我的代碼執行操作返回的東西,但在你的代碼performOperations有一個void返回類型:( – 2010-12-16 07:28:05
瞭解,這就是爲什麼我把'receivedValue'的評論,在那一點上,你將返回值的兩種方式之一。第一種選擇是向類'performOperations'和'receivedValue'中添加委託協議,將數據發送回調用方,如'[[self perfOpsDelegate] operationSuccessful:YES withResponseValue:response];'。另一個選項是使用NSNotificationCenter通知:調用者觀察類似於ProxyDataUpdatedNotification的內容,'receivedValue'在通知的'userInfo'字典中用'response'發送該通知。 – 2010-12-16 22:07:50