2012-11-29 32 views
0

我想知道是否有人可以指出为什么我无法捕获Web回复。我的NSLog显示我的[NSMutableData receivedData]长度为整个连接运行的0。当我点击登录按钮时,我点击的脚本返回一个字符串。我的NSLog结果粘贴在下面,之后我粘贴了我的.h和.m文件。iOs从NSURLConnection收到的数据为零

的NSLog结果

2012-11-28 23:35:22.083 [12548:c07] Clicked on button_login 
2012-11-28 23:35:22.090 [12548:c07] theConnection is succesful 
2012-11-28 23:35:22.289 [12548:c07] didReceiveResponse 
2012-11-28 23:35:22.290 [12548:c07] didReceiveData 
2012-11-28 23:35:22.290 [12548:c07] 0 
2012-11-28 23:35:22.290 [12548:c07] connectionDidFinishLoading 
2012-11-28 23:35:22.290 [12548:c07] 0 

ViewController.h

#import <UIKit/UIKit.h> 

@interface ViewController : UIViewController 

// Create an Action for the button. 
- (IBAction)button_login:(id)sender; 

// Add property declaration. 
@property (nonatomic,assign) NSMutableData *receivedData; 

@end 

ViewController.m

#import ViewController.h 

@interface ViewController() 
@end 

@implementation ViewController 

@synthesize receivedData; 

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

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {  
    NSLog(@"didReceiveData");  
    [receivedData appendData:data]; 
    NSLog(@"%d",[receivedData length]); 
} 

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {  
    NSLog(@"connectionDidFinishLoading"); 
    NSLog(@"%d",[receivedData length]); 
} 

- (IBAction)button_login:(id)sender { 

    NSLog(@"Clicked on button_login");  
    NSString *loginScriptURL = [NSString stringWithFormat:@"http://www.website.com/app/scripts/login.php?"]; 

    NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:loginScriptURL]]; 

    NSString *postString = [NSString stringWithFormat:@"&paramUsername=user&paramPassword=pass"]; 
    NSData *postData = [postString dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; 

    [theRequest setHTTPMethod:@"POST"]; 
    [theRequest setHTTPBody:postData]; 

    // Create the actual connection using the request. 
    NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self]; 

    // Capture the response 
    if (theConnection) {   
     NSLog(@"theConnection is succesful");   
    } else {   
     NSLog(@"theConnection failed"); 
    } 
} 
@end 

回答

4

问题是你没有初始化receivedData实例。只要改变你的财产,如:

@property (nonatomic, retain) NSMutableData *receivedData; 

和变革,如方法:

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

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 
{  
    NSLog(@"didReceiveData");  
    [self.receivedData appendData:data]; 
    NSLog(@"%d",[receivedData length]); 
} 

- (void)connectionDidFinishLoading:(NSURLConnection *)connection 
{  
    NSLog(@"connectionDidFinishLoading"); 
    NSLog(@"%d",[receivedData length]); 
} 

- (IBAction)button_login:(id)sender 
{ 

    NSLog(@"Clicked on button_login");  
    NSString *loginScriptURL = [NSString stringWithFormat:@"http://www.website.com/app/scripts/login.php?"]; 

    NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:loginScriptURL]]; 

    NSString *postString = [NSString stringWithFormat:@"&paramUsername=user&paramPassword=pass"]; 
    NSData *postData = [postString dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; 

    [theRequest setHTTPMethod:@"POST"]; 
    [theRequest setHTTPBody:postData]; 

    // Create the actual connection using the request. 
    NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self]; 

    // Capture the response 
    if (theConnection) 
    {   
     NSLog(@"theConnection is succesful"); 
     self.receivedData = [NSMutableData data];  
    } else 
    {   
     NSLog(@"theConnection failed"); 
    } 
} 
+0

仍然有问题? –

+0

.....我在过去两个晚上一直在谷歌搜索和尝试不同的东西。我花了30秒来申请你的更正,现在它返回一个长度。非常感谢你。 – yhl

+0

P.S. - 我想我需要一些不在互联网上的阅读材料(即一本书)。我需要学习很多东西。 – yhl

1

恳求在nslog中尝试“%i”而不是%d

+0

为什么...我不是d ..,你试试ð,而不是我.. :) – Rajneesh071

1

您可以尝试下面的代码可能会对您有所帮助。

- (IBAction)button_login:(id)sender { 

    NSLog(@"Clicked on button_login"); 
      NSMutableDictionary *dictionnary = [NSMutableDictionary dictionary]; 
      [dictionnary setObject:@"user" forKey:@"Username"]; 
      [dictionnary setObject:@"pass" forKey:@"Password"]; 

      NSError *error = nil; 
      NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dictionnary 
                   options:kNilOptions 
                   error:&error]; 

      NSString *urlString = @"Sample URL"; 

      NSURL *url = [NSURL URLWithString:urlString]; 
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; 
      [request setHTTPMethod:@"POST"]; 

      [request setHTTPBody:jsonData]; 
      NSURLResponse *response = NULL; 
      NSError *requestError = NULL; 
      NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&requestError]; 
      NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding] ; 
      NSLog(@"%@", responseString); 

} 

,如果它是一个GET请求,那么,你可以尝试链接:/login.php?username=admin &密码= 1212 3

- (IBAction)button_login:(id)sender { 

    NSLog(@"Clicked on button_login"); 
    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"/login.php?username=adm‌​in&password=1212‌​3"]]; 

    // Perform request and get JSON as a NSData object 


    NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; 
    NSLog(@"response=%@",response); 

} 

,并使用此代码。

相关问题