2011-08-24 30 views
0

我在我的程序中有一席之地,我需要將一些數據發送到服務器,獲取響應並將其放入字典中。iPhone JSON異步編碼

我對此很新,直到現在,我一直在向服務器發送同步請求。這很容易,因爲我可以通過執行調用的函數獲取響應並將其設置在我的字典中。

但是,異步處理顯然會使問題複雜化。

我該如何輕鬆,優雅地確定我的請求何時完成處理,然後繼續做我在做的事情,而不鎖定整個程序?

感謝任何和所有答案/教程。

編輯:作爲對以下評論的迴應,我發現令人困惑的是,我的回覆會在連續數秒後顯示在connectionDidFinishLoading中,而且我真的不知道如何繼續做我在做的事情調用請求的方法,而不需要用NSTimer或其他任何方式進行瘋狂猜測。

+2

有許多內置和第三方的方法來做到這一點......也許你可以包括更多的細節,比如你試過的東西,以及你發現哪些部分是複雜/混亂的? – jtbandes

回答

3

NSNotification是處理異步連接的好方法。

首先,創建一個像這樣的通知發送請求。

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateView) name:@"downloadCompleted" object:nil]; 

接着在connectionDidFinishLoading方法,有另一種通知這樣,

[[NSNotificationCenter defaultCenter] postNotificationName:@"downloadCompleted" object:nil]; 

旁邊有其中u獲得烏爾字典數據中的線這個通知代碼。 上面的通知會發送一條消息給第一個創建的通知,它會引發updateView(在這個例子中)方法。您可以使用該方法處理獲得的數據。希望這可以幫助。乾杯。 :)快樂編碼:)

0

您可以利用NSThreadNSNotifications異步完成工作。您可以在Google上查看教程並按照您的要求以累積方式實施。

NSThread可以讓您的用戶界面在後臺獲取數據時保持活動狀態,然後當數據下載時它會發布通知,以便通知您現在可以獲取數據並更新您的用戶界面。

下面是類引用:

http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSThread_Class/Reference/Reference.html

http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSNotification_Class/Reference/Reference.html

http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSNotificationCenter_Class/Reference/Reference.html

2

你也可以使用第三方庫(基於塊的iOS4 +,輕量級),如AFNetworkingASIHTTPRequest(iOS3 +,硬核)。

您可以啓動後臺調用,併爲不同結果提供塊或委託。