2012-09-13 41 views
2

我可以得到一些帮助吗?我很绝望。我有一个PHP脚本,它发送参数,它执行一些处理,然后使用echo输出结果。我用如何使用NSURLConnection获取PHP回显?

[[NSString alloc] initWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"myPHPPathWithParameters"]] encoding:NSUTF8StringEncoding]; 

过去得到呼应PHP作为的NSString的信息,和它的工作,但现在没有。它返回一个NULL NSString。无论如何,我认为正确的方法是通过实现NSURLConnection,因为它实现了用于观察连接进度的委托方法等。所以,我声明了一个静态NSMutableData * receivedData,然后我使用iOS文档中的示例:

NSURLRequest *req=[NSURLRequest 
          requestWithURL:[NSURL URLWithString:@"http://myphp.php?parameters=paramteres"] 
          cachePolicy:NSURLRequestUseProtocolCachePolicy 
          timeoutInterval:30.0]; 

    NSURLConnection *con=[[NSURLConnection alloc] initWithRequest:req delegate:self]; 

    if (con) 
     receivedData = [[NSMutableData data] retain]; 
    else 
     NSLog(@"Request failed to load."); 

然后,我实现委托方法(我也自我声明NSURLConnectionDataDelegate):

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{ 
    NSLog(@"RECEIVED DATA;"); 
    [receivedData appendData:data]; 
} 

-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{ 
    NSLog(@"received response;"); 
    [receivedData setLength:0]; 
} 

-(void)connectionDidFinishLoading:(NSURLConnection *)connection{ 
    NSLog(@"FINISHED;"); 
} 

但是这些方法永远不会叫!终端永远不会显示任何日志消息,显示委托方法执行。据我了解,这个方法被调用,并将数据附加到receivedData,然后我必须从receiveData获取NSString,一旦connectionDidFinishLoading方法被调用。有什么建议么?我也尝试了NSURLConnection中的同步请求类方法,但该方法获得了整体HTML,我只是想获得什么PHP回声,并解析它作为NSString在应用程序内部使用:(

回答

2

receivedData转换成串

-(void)connectionDidFinishLoading:(NSURLConnection *)connection{ 
    NSString *myStringData = [[NSString alloc] initWithData:receivedData encoding:NSStringEncodingConversionAllowLossy]; 
} 

,然后打印您的字符串NSLog(@"MyString: %@", myStringData)

+0

但委托方法永远不会叫!所以receivedData总是空。 – acib708