2012-03-06 83 views
0

我需要一個很好的解決方案來解決我的小問題。iPhone objective c在NSThread中的異步HTTPS請求

我現在有什麼: 我的應用程序很好地處理了asyncron https請求。目前該應用上傳JSON對象,迄今爲止非常好。之後,我將這個對象保存在一個sqlite數據庫中。

現在我必須改變以確定接收到的服務器響應代碼是什麼。 如果上傳的數據有效,我會得到類似000的響應代碼,如果不是,則會得到類似151的代碼。爲此,我必須等待服務器響應以將響應代碼保存到數據庫中。

我也嘗試過使用NSThread。但這並沒有像我預期的那樣好。

有人有什麼建議嗎?我的意思是,它應該是最常見的事情之一;)我只是沒有看到它。

THX,多米尼克

+1

如果你們投下來,至少可以給新用戶什麼是如此不好的問題,讓他/她可能會提高它的提示。 – 2012-03-06 13:02:05

+0

@NickWeaver,會很好;) – 2012-03-06 13:16:50

+0

爲了幫助你解決你的問題:我沒有得到什麼主要問題。您有麻煩來確定哪個服務器響應實際上屬於哪個請求? – 2012-03-06 14:30:08

回答

0

我通常使用一個NSOperationQueue來管理我的溝通。這使您可以使用同步請求而不是異步請求,並且可以使用一種方法處理整個shebang。

例子:

-(void)doIt { 
    NSInvocationOperation *op = [[[NSInvocationOperation alloc] initWithTarget:self selector:@selector(doIt_) object:nil] autorelease]; 
    [opQueue addOperation:op]; 
} 

-(void)doIt_ { 
    NSData *data; 
    NSMutableURLRequest *request; 
    NSURLResponse *response = nil; 
    NSError *error = nil; 

    // Build request to spec 

    data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:error]; 

    // do something with data 

    [self performSelectorOnMainThread:@selector(yadda) withObject:yaddayadda waitUntilDone:NO]; 
} 

如果你使用異步加載方法,你必須實現一個委託來捕捉響應數據,因爲它下來,並在結束時用它做什麼。

+0

你是對的,但我需要一個SSL連接,所以我必須使用異步請求。 Syncron方法不支持HTTPS。我將看看NSOperationQueue。 THX – 2012-03-06 17:09:43

0

我建議你看看ASIHTTPRequest這是CFNetwork API的包裝。特別關注它爲異步HTTP請求提供的機制,您可以在請求完成或失敗後定義要執行的塊,並且您可以輕鬆檢查響應數據。您的代碼將是這樣的:

__block ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; 
    [request setRequestMethod:@"POST"]; 
    // add your json object to the request 
    [request setCompletionBlock:^{ 
    int responseCode = [request responseStatusCode]; 
    NSData *responseData = [request responseData]; 
    // do whatever you want with this info 
    }]; 
    [request setFailedBlock:^{ 
    NSError *error = [request error]; 
    // handle the error 
    }]; 
    [request startAsynchronous]; 
+0

通常我使用ASIHTTP框架,但據我所知它不支持ios5/ARC。 – 2012-03-06 17:06:44