iPhone没有下载文件

时间:2011-10-20 15:18:46

标签: iphone asihttprequest

我有一个经过测试和运行的php脚本,它从数据库中提取并作为XML返回。 我已经使用ASIHTTPRequest成功地对PHP脚本进行了POST。 我寻找在线帮助以实现这一目标。据我所知,所有代码都是可靠的。它编译正确,运行没有问题,甚至使请求没有问题。我没有错。 由于我已经彻底测试并成功使用了php,我认为休息是在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];

1 个答案:

答案 0 :(得分:3)

您的代码中的几点:

  1. 为什么使用POST请求下载文件?通常下载是通过GET请求完成的(如果我们正在谈论REST)。您可以使用简单的ASIHTTPRequest +将您的帖子值添加为URL-Parameters(相应地在php端处理它)。

  2. 您正在分配和保留您的ASIFormDataRequest实例,但只发布一次 - >导致内存泄漏。 (对于每个alloc / copy / retain - >释放它)。

  3. 回答你的问题: 我认为downloadDestinationPath是错误的(应用程序没有权限在那里写)。 更好:

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

    现在,您的“dbInfo.xml”文件将保存在应用程序的documents文件夹中。 如果您在模拟器中运行应用程序,则可以在以下位置找到目录: 〜/ Library / Application Support / iPhone Simulator / IOS_SDK_VERSION / Applications / APP_UID / Documents

    和: 如果你实现downloadProgressDelegate: request:didReceiveBytes:方法,你可以检查你是否真的在接收数据:

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