如何显示ASIHTTPRequest的responseData值?

时间:2010-08-06 10:07:09

标签: iphone uitextfield response asihttprequest

我在我的用户注册应用程序中使用了以下代码来与远程数据库进行交互。

-(IBAction)checkFirstName:(UITextField*)textField   
{

    NSURL  *url = [NSURL URLWithString:@"http://mysite.com"];

     ASIFormDataRequest  *request = [ASIFormDataRequest  requestWithURL:url];
     [request setPostValue: firstName.text  forKey:@"firstName"]; 

     [request  setDelegate:self];
     [request  didReceiveDataSelector];
     [request  startAsynchronous];

      firstName.rightViewMode = UITextFieldViewModeAlways;
       if (receivedData==0)
      { 
        UIImage  *image = [UIImage imageNamed:@"close.png"];
        [button  setImage:image  forState:UIControlStateNormal];
        firstName.rightView = button;
      }
}

'firstName'是我用来从用户输入的文本字段值。     我使用以下方法接收来自数据库的响应

 -(void)request:(ASIHTTPRequest *)request  didReceiveData:(NSData *)data

    {
      receivedData = [request responseData];
     [receivedData  appendData:data];

     receivedString = [[NSString alloc]  initWithData:receivedData
               encoding:NSUTF8StringEncoding];
    }

'receivedData'是全局声明的NSData对象。我必须将'responseData'作为0或1,它将存储在变量'receivedData'中。

  1. 如何检查'receivedData'对象(0或1)的值?。
  2. checkFirstName:将在uitextfield上触发动作编辑DidEnd事件。
  3. 我们可以使用responseData == 0吗?请给我一个解决方案...... 等待紧急回复..

3 个答案:

答案 0 :(得分:3)

首先,您需要重新考虑方法的工作方式。

  1. [request didReceiveDataSelector];返回请求接收数据时调用的方法名称。由于您没有将此值设置为变量,因此该行不执行任何操作。
  2. if (receivedData==0)不会做你想做的事。请求以异步方式运行,因此receivedData的值不会反映您之前开始2行的请求中发生的情况。
  3. 您是否尝试检查receivedData是否为空?如果是这样,请说:if (receivedData == nil),它会清楚说明您在此处尝试做什么。
  4. 在您的request:didReceiveData方法中,您似乎从请求中获取数据并将其附加到自身上(我不确定在请求之前访问它时responseData属性是什么样的完了。可能是null)。无论发生什么,我都很确定这不是你想要发生的事情。
  5. 最后,除非你真的想自己聚合和解析传入的数据(你可能没有),否则你应该使用而不是 request:didReceiveData方法来实现这两种方法。

    - (void)requestFinished:(ASIHTTPRequest *)request;
    - (void)requestFailed:(ASIHTTPRequest *)request;
    

    请求完成后调用它们。通过调用

    访问服务器响应的字符串值
    NSString *receivedString = [request responseString];
    

    只有在调用requestFinished方法后,才能设置名字UITextField的值。

    还有一点建议:你很少需要在Obj-C中使用全局变量,你当然不需要在这里使用它们。我尽快摆脱那些。

    我对你的意图做了很多假设,所以如果这不是你想要的,请留言。祝你好运!

答案 1 :(得分:0)

using(responseData == 0)只会告诉你是否分配了responseData。

如果我理解你所说的话,你需要检查你从网上得到的回复......

在这种情况下:

receivedString = [[NSString alloc]  initWithData:receivedData
           encoding:NSUTF8StringEncoding];

做一个简单的NSLog:

NSLog(@"result: %@", receivedString);

答案 2 :(得分:0)

首先,它看起来好像你正在检查请求的结果,但是作为异步请求,检查将在请求完成之前进行。

至于你的主要问题,如果服务器响应一个字符(只有'0''1'),你可能最好直接使用[request responseString],因为它会自动检测到enconding并为你做转换。

您无法将receivedData与0或1进行比较,因为它是指针,您将无法获得预期的结果。