2011-04-19 51 views
1

我在Objective-C Mac應用程序中使用ASIHTTPRequest。我創建了一個訪問Web服務的公共API(通過ASIHTTPRequest)的類,我們稱之爲PublicAPI。我所想要做的是編寫直接從Web服務,像這樣返回數據的方法......Objective-C和ASIHTTPRequest返回值

publicAPI = [[PublicAPI alloc] initWithAccountInfo:email:[self email] password:[self password]]; 
NSArray *theData = [publicAPI getData]; 

所以,getData需要啓動ASIHTTPRequest 返回來自服務器的響應。問題是我想通過ASIHTTPRequest的startAsynchronous選項進行ASIHTTPRequest調用,該選項將服務器的響應委託給requestFinished方法。

如何使用requestFinished的結果作爲getData方法的返回值?

感謝您的諮詢!

回答

0

你的方法需要getData等到響應返回之前回來,這將使連接同步。這並不合理。

已經通過ASIHTTPRequest(和NSURLConnection)實現的委託模式是最好的方法。

如果你只是需要進行測試的同步連接,NSURLConnection的有一個類方法:

+ (NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NSURLResponse **)response error:(NSError **)error 
+0

感謝您的意見,這是有道理的。那麼,那麼,習慣性的再次獲取數據的方法是什麼呢?也許'getData'只會啓動請求(並且不會返回任何內容),然後我會使用NSNotification來告訴其他類數據已返回?謝謝! – 2011-04-19 04:18:12

+0

您可以使用具有成功/失敗回調的委託。如果您需要立即通知多個班級,您可以播發通知。最好的方法是成功/失敗。有一個食譜,在新iOS iOS食譜書(目前處於測試階段)中包含阻止回調的NSURLConnection:http://pragprog.com/titles/cdirec/ios-recipes – gerry3 2011-04-19 19:05:12

+0

感謝您的提示。你提供的信息是令人興奮的,我需要的。這篇文章也有幫助:http://css.dzone.com/articles/do-not-publishcreating-your – 2011-04-20 02:38:40

0

讓你 [publicAPI的getData] 實際上是ASIHTTPRequest的子類。這將接收ASI委託的回調(成功,失敗),並將處理(JSON,XML,CoreData等)您的傳入數據。

在處理完數據之後,您可以使用任何類型的通知來將NSArray數據返回到您想要的位置。

如果您針對每個後端的API調用進行子類化,並使用通用的系統處理您的API中的每個API,則可以使後端與您的通信更加友好和輕鬆。