2012-03-06 165 views
9

我很难找到NSURLConnection委托方法实现的任何示例。NSURLConnection委托方法

我想通过点击按钮发送带有HTTP帖子的数据。不知道如何制作“提交”屏幕和“提交”。 (我知道如何使用微调,并将使用它们)

我使用此代码根据botton单击操作,但无法使用任何委托的东西。不知道如何用我目前的设置来实现它们。

NSMutableURLRequest *request = 
    [[NSMutableURLRequest alloc] initWithURL: 
    [NSURL URLWithString:@"http://myURL.com"]]; 

    [request setHTTPMethod:@"POST"]; 

    NSString *postString = [wait stringByAppendingString:co]; 

    [request setValue:[NSString 
         stringWithFormat:@"%d", [postString length]] 
    forHTTPHeaderField:@"Content-length"]; 



    [request setHTTPBody:[postString 
          dataUsingEncoding:NSUTF8StringEncoding]]; 

    //[[NSURLConnection alloc] initWithRequest:request delegate:self]; 
    [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; 


    [SVProgressHUD dismissWithSuccess:@"Submission Successful"]; 

回答

8

您需要使用新的NSURLConnectionDataDelegate协议。

我发现了一些exemples这里:

http://blog.kemalkocabiyik.com/index.php/2012/02/fetching-data-with-getpost-methods-by-using-nsurlconnection/

如果你可以阅读葡萄牙语:在此代码,您将使用GCD,活动指示灯http://www.quaddro.com.br/blog/desenvolvimento-ios/baixando-conteudo-com-nsurlconnection-e-nsurlconnectiondatadelegate-no-ios

+0

第二个链接,portugese一个真的很有帮助,即使我不明白protugese,谢谢.. – Bhimbim 2017-07-17 09:23:56

25
- (void)connection:(NSURLConnection*)connection didReceiveResponse:(NSURLResponse *)response 
{ 
    NSLog(@"Did Receive Response %@", response); 
    responseData = [[NSMutableData alloc]init]; 
} 
- (void)connection:(NSURLConnection*)connection didReceiveData:(NSData*)data 
{ 
    //NSLog(@"Did Receive Data %@", data); 
    [responseData appendData:data]; 
} 
- (void)connection:(NSURLConnection*)connection didFailWithError:(NSError*)error 
{ 
    NSLog(@"Did Fail"); 
} 
- (void)connectionDidFinishLoading:(NSURLConnection *)connection 
{ 
    NSLog(@"Did Finish"); 
    // Do something with responseData 
} 
+0

不知道如何设置代理,因为我有我所有的代码后上方,在 - (IBAction为)提交:(ID)发送当您启动URL连接 – socbrian 2012-03-06 03:45:53

+0

所有四种方法将火。这应该在与启动连接的方法相同的类中的实现文件中 – Eric 2012-03-06 03:50:40

+0

因此,你说这个代码在我的提交类下?当我这样做时,我收到错误。 – socbrian 2012-03-06 03:59:53

4
//Connection request 
-(void)requestURL:(NSString *)strURL 
    { 
     // Create the request. 
     NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:strURL]]; 

     // Create url connection and fire request 
     NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:request delegate:self]; 

    } 


    //Delegate methods 
    - (void)connection:(NSURLConnection*)connection didReceiveResponse:(NSURLResponse *)response 
    { 
     NSLog(@"Did Receive Response %@", response); 
     responseData = [[NSMutableData alloc]init]; 
    } 
    - (void)connection:(NSURLConnection*)connection didReceiveData:(NSData*)data 
    { 
     //NSLog(@"Did Receive Data %@", data); 
     [responseData appendData:data]; 
    } 
    - (void)connection:(NSURLConnection*)connection didFailWithError:(NSError*)error 
    { 
     NSLog(@"Did Fail"); 
    } 
    - (void)connectionDidFinishLoading:(NSURLConnection *)connection 
    { 
     NSLog(@"Did Finish"); 
     // Do something with responseData 

     NSString *strData=[[NSString alloc] initWithData:responseData encoding:NSASCIIStringEncoding]; 

     NSLog(@"Responce:%@",strData); 
    } 

http://codewithchris.com/tutorial-how-to-use-ios-nsurlconnection-by-example/

2

, UIButton操作 登录按钮 首先你会我在另一个线程上调用StartActivityindicator,它会一直移动,直到您移除或停止Activityindicator。 然后您将调用Web服务以在GCD队列中登录。 当您从服务器调用主队列收到响应以更新UI时。

// After the interface declration 
@interface LoginViewController() 
{ 

NSData *responseData; 
dispatch_queue_t myqueue; 

}  
//Button Action 
- (IBAction)Login_Button_Action:(id)sender 

{ 

[NSThread detachNewThreadSelector: @selector(StartActivityindicator) toTarget:self withObject:nil]; 
myqueue =dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0); 
dispatch_group_t group=dispatch_group_create(); 
dispatch_group_async(group, myqueue, ^{ [self loginWebService];}); 
} 
-(void)loginWebService 
{ 
//Combine Both url and parameters 
    NSString *UrlWithParameters = [NSString stringWithFormat:@"http://www.xxxxx.com?count=%@&user=%@&email=%@&password=%@",@"4",@"Username",[email protected]"UserEmail",@"PAssword String"]; 
//Pass UrlWithParameters to NSURL 
NSURL *ServiceURL =[NSURL URLWithString:UrlWithParameters]; 

NSMutableURLRequest *serviceRequest =[NSMutableURLRequest requestWithURL:ServiceURL]; 
[serviceRequest setHTTPMethod:@"POST"]; 

[serviceRequest setValue:@"application/json" forHTTPHeaderField:@"accept"]; 
[serviceRequest setValue:@"application/json" forHTTPHeaderField:@"content-type"]; 

//GEt Response Here 
NSError *err; 
NSURLResponse *response; 
responseData = [NSURLConnection sendSynchronousRequest:serviceRequest returningResponse:&response error:&err]; 

NSHTTPURLResponse* httpResponse = (NSHTTPURLResponse*)response; 
NSInteger code = [httpResponse statusCode]; 
// check status code for response from server and do RND for code if you recive anything than 200 
NSLog(@"~~~~~ Status code: %ld",(long)code); 
if (code ==200) 
{ 
// your response is here if you call right 
    NSArray *jsonArray = [NSJSONSerialization JSONObjectWithData:responseData options: NSJSONReadingMutableContainers error: &err]; 

dispatch_async(dispatch_get_main_queue(),^{ 
     // place the code here to update UI with your received response 
     [NSThread detachNewThreadSelector: @selector(StopActivityindicator) toTarget:self withObject:nil]; 
     }); 
} 
} 
//Activity indicator Method to display 
- (void) StartActivityindicator 
{ 
mySpinner.hidden = NO; 
[mySpinner startAnimating]; 
} 
- (void) StopActivityindicator 
{ 
mySpinner.hidden = YES; 
[mySpinner stopAnimating]; 
} 
+0

请加上这段代码的简短描述。也请花点时间回顾[回答] – 2015-09-03 11:55:19