2012-03-07 106 views
3

我有一個使服務器發出GET請求的函數。它工作正常,但由於某種原因,它被稱爲兩次。我按下按鈕時調用函數。iOS HTTP請求被調用兩次

這是功能代碼:

-(void) GETasync: (NSString *) path{ 
    receivedData = [[NSMutableData alloc] init]; 
    NSURLRequest *request=[NSURLRequest requestWithURL: 
           [NSURL URLWithString: path] 
           cachePolicy:NSURLRequestReloadIgnoringLocalCacheData 
           timeoutInterval:60.0]; 
    NSHTTPURLResponse * response; 
    NSError * error; 
    NSData * data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; 
    NSLog(@"data received"); 
} 

所以我在輸出中看到:

2012-03-07 16:36:41.509 KW2[24136:bf03] data received 
2012-03-07 16:36:41.694 KW2[24136:bf03] data received 

我也有POST請求的功能,它是同樣的麻煩吧。

+0

您可以在顯示代碼的地方打電話給這個方法嗎? – 2012-03-07 11:55:26

+0

你是如何將按鈕連接到該方法的? – 2012-03-07 11:57:16

+0

該問題與連接POST無關。你按鈕事件被稱爲一次以上。你如何分配按鈕上的事件? – 2012-03-07 11:57:16

回答

0

問題在於我將IBOutlets從File'OwnerFirst Responder連接到IB中的按鈕。

File's Owner刪除電線後,該方法開始只被調用一次。

0

我假設您在代理方法connection:didReceiveData:內打印出該日誌。該方法可以針對單個連接多次調用 - 實際上它通常至少被調用兩次。

從文檔:

委託是週期性地發送連接:didReceiveData:消息作爲數據被接收。代表實現負責存儲新接收的數據。編輯:我看到,在你最近的編輯中,你已經添加了日誌信息(或者我沒有馬上看到它 - 我對此感到羞恥)。

您是否可能通過通知處理程序調用該方法?如果是這樣,你有可能爲該通知進行雙重註冊 - >因此你的處理程序被調用兩次。

0

另外請確保在Interface Builder中檢查您的按鈕的IBAction連接。如果在IB中複製和粘貼按鈕,則最終可能會有一個按鈕具有2個或多個相同的IBAction連接,這會使該方法只需單擊一次即可執行兩次。