2011-10-20 116 views
1

我有一個測試和工作的PHP腳本,從數據庫中拉出並返回XML。 我已經使用ASIHTTPRequest成功地發佈了一個POST腳本。 我已經在線尋求幫助,以使其工作。據我所知,所有的代碼都是可靠的。它編譯正確,運行沒有問題,甚至使請求沒有問題。我沒有得到任何錯誤。 由於我已經徹底測試併成功地使用了PHP,我假設這個休息是在iPhone端。iPhone沒有下載文件

我不明白爲什麼它不會將XML文件下載到指定位置。 任何有識之士將不勝感激。

// Create the request 
NSURL *url=[[NSURL alloc]initWithString:@"http://localhost:8888/Project/script.php"]; 
ASIFormDataRequest *request = [[[ASIFormDataRequest alloc] initWithURL:url]retain]; 

// gather *ALL* data present 
if ([txtEmail.text length] > 0) 
    [request setPostValue:txtEmail.text forKey:@"email"]; 
if ([txtFName.text length] > 0) 
    [request setPostValue:txtFName.text forKey:@"firstname"]; 
if ([txtID.text length] > 0) 
    [request setPostValue:txtID.text forKey:@"id"]; 
if ([txtLName.text length] > 0) 
    [request setPostValue:txtLName.text forKey:@"lastname"]; 

[request setDidFailSelector:@selector(requestFailed:)]; 
[request setDidFinishSelector:@selector(requestDone:)]; 

[request setDownloadDestinationPath:@"/Library/Project/dbInfo.xml"]; 
[request setDelegate:self]; 
[request startSynchronous]; 
[request release]; 
[url release]; 
+0

,你能否告訴我們setDownloadDestinationPath方法的定義。您是否有權將文件讀取/寫入您的下載指定位置? –

+0

setDownloadDestinationPath是ASIHTTPRequest的一部分。這不是關於權利。我無法讓它與 即 的直接響應一起工作NSString * response = [request responseString]; – anijam

+0

在端口8888上iPhone上是否運行服務器?在這種情況下'localhost'將會是電話本身... – ceejayoz

回答

3

您的代碼幾點:

  1. 你爲什麼要使用POST請求下載一個文件?通常通過GET請求下載(如果我們正在說REST)。你可以使用一個簡單的ASIHTTPRequest +將你的帖子值添加爲URL參數(+相應地在PHP端處理它)。

  2. 您正在分配並保留您的ASIFormDataRequest實例,但只釋放一次 - >導致內存泄漏。 (對於每個分配/複製/保留 - >釋放它)。

回答您的問題: 我認爲downloadDestinationPath是錯誤的(應用程序沒有權限寫入那裏)。 更好:

NSString *docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; 
NSString *path = [docDir stringByAppendingPathComponent:@"dbInfo.xml"]; 
[request setDownloadDestinationPath:path]; 

現在你的「dbInfo.xml」文件保存在您的應用程序的文件夾。 如果你正在運行的模擬器您的應用程序,你可以找到在目錄: 〜/庫/應用程序支持/ iPhone模擬器/ IOS_SDK_VERSION /應用/ APP_UID /文件

和:如果實現了 downloadProgressDelegate:要求:didReceiveBytes:方法,您可以檢查是否你實際上接收數據:

-(void)request:(ASIHTTPRequest *)request didReceiveBytes:(long long)bytes { 
    NSLog(@"received bytes ..") ; 
} 
+0

我正在使用POST來適應它。目前的項目是讓我爲更大的項目做好準備,並且我需要熟悉這些部件。該文件不會顯示在庫中。 但是,謝謝你捕捉內存泄漏。 – anijam