我在目标C上是一个完整的菜鸟,所以对于很多人来说这可能是一个非常愚蠢的问题。
目前,我有一个带有“SignIn”按钮的视图,单击此按钮可激活我在下面定义的sigupUp IBAction。基本上,此方法需要进行JSON调用并返回有关用户的一些数据。
所以,现在,我的代码看起来像这样:
-(IBAction)signIn:(id)sender{
//run registration API call
//establish connection
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *postLength = [NSString stringWithFormat:@"%d",[postData length]];
NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
[request setURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://www.apicallhere.com/api/auth"]]];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Current-Type"];
[request setHTTPBody:postData];
[[NSURLConnection alloc]initWithRequest:request delegate:self];
responseData = [[NSMutableData data] retain];
}
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{[responseData setLength:0];}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{[responseData appendData:data];}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{/*NSLog(@"%@",error);*/}
-(void)connectionDidFinishLoading:(NSURLConnection *)connection{
NSString *response=[[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
....code carries on from here.
}
正如您所看到的,我的代码存在的问题是即使它是通过'SignUp'方法启动的,它也会以'connectionDidFinishLoading'方法结束。我希望在单个方法中包含所有这些代码。不是2个单独的,因为我希望能够返回一个布尔值来验证连接是否成功。
如果有人可以请告诉我如何将此程序编码为单一方法,我将非常感激。
答案 0 :(得分:1)
如果您真的希望代码全部在一个方法中,那么您可能正在讨论可能阻止同步HTTP请求方法和响应调用的所有UI等。
将此全部“内联”的方法是sendSynchronousRequest:returnsResponse:NSURLConnection上的错误
[NSURLConnection sendSynchronousRequest:returningResponse:error:]
即。
NSError *error;
NSURLResponse *response;
[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
... do something with the NSURLResponse to enjoy with your data appropriately...
我个人鼓励你看一下这种异步方法的大部分内容。