0

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

-(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 Editing DidEnd 事件上触发操作。

我们可以使用 responseData==0 吗?请给我建议一个解决方案...等待紧急响应..

4

3 回答 3

3

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

  1. [request didReceiveDataSelector];返回请求接收数据时调用的方法名。由于您没有将此值设置为变量,因此该行不执行任何操作。
  2. if (receivedData==0)不会做你想做的事。请求异步运行,因此 的值receivedData永远不会反映您之前启动的 2 行请求中发生的情况。
  3. 您是否要检查是否receivedData为空?如果是这样,请说:if (receivedData == nil),它可以清楚地说明您要在这里做什么。
  4. 在您的request:didReceiveData方法中,您似乎正在从请求中获取数据并将其附加到自身(我不确定responseData在请求完成之前访问该属性时该属性的外观。它可能为空)。不管这里发生了什么,我很确定这不是你想要发生的。

最后,除非您真的想自己聚合和解析传入的数据(您可能不想),否则您应该使用这两种方法而不是request:didReceiveData方法。

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

在请求完全完成后调用它们。通过调用访问服务器响应的字符串值

NSString *receivedString = [request responseString];

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

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

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

于 2010-08-06T11:13:36.987 回答
0

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

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

在这种情况下:

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

做一个简单的 NSLog :

NSLog(@"result: %@", receivedString);
于 2010-08-06T10:38:31.583 回答
0

首先,在我看来,您好像是在立即检查请求的结果,但作为异步请求,检查将在请求完成之前进行。

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

您不能receivedData与 0 或 1 进行比较,因为它是一个指针,您不会得到预期的结果。

于 2010-08-06T10:43:47.477 回答