iPhone目标C:将方法结合在一起

iPhone目标C:将方法结合在一起,iphone,objective-c,json,connection,ibaction,Iphone,Objective C,Json,Connection,Ibaction,我在objective-C是个彻头彻尾的笨蛋,所以对你们很多人来说,这可能是一个非常愚蠢的问题 目前,我有一个带有“登录”按钮的视图,单击该按钮可激活我在下面定义的sigupUp iAction。基本上,此方法需要进行JSON调用并获取有关用户的一些数据 现在,我的代码看起来像这样: -(IBAction)signIn:(id)sender{ //run registration API call //establish connection NSData *postData = [post

我在objective-C是个彻头彻尾的笨蛋,所以对你们很多人来说,这可能是一个非常愚蠢的问题

目前,我有一个带有“登录”按钮的视图,单击该按钮可激活我在下面定义的sigupUp iAction。基本上,此方法需要进行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.
}
正如您所看到的,我的代码的问题是,尽管它是通过“注册”方法启动的,但它是通过“ConnectiondFinishLoading”方法完成的。我想在一个方法中包含所有这些代码。不是两个单独的,因为我希望能够返回一个布尔值来验证连接是否成功


如果有人能告诉我如何将这个过程编码到一个方法中,我会非常感激。

如果你真的想将代码全部放在一个方法中,你说的是在一个同步HTTP请求方法和响应调用中潜在地阻止所有UI等等

在NSURLConnection上,将此全部“内联”的方法是sendSynchronousRequest:returningResponse:error

[NSURLConnection sendSynchronousRequest:returningResponse:error:]
i、 e


我个人鼓励您为这类异步方法寻找一种替代方法。

如果您真的希望将代码全部放在一个方法中,您所说的可能是在同步HTTP请求方法和响应调用上阻塞所有UI等等

在NSURLConnection上,将此全部“内联”的方法是sendSynchronousRequest:returningResponse:error

[NSURLConnection sendSynchronousRequest:returningResponse:error:]
i、 e


我个人鼓励您为这类异步方法寻找一种替代方法。

请格式化代码,否则,我看不到任何东西。我希望将所有这些代码放在一个方法中。不是两个单独的,因为我希望能够返回一个布尔值来验证连接是否成功。实际上,你可能认为你想要这样,但是当你第一次尝试登录时,你会意识到你不想要它,其他人也不想要。在应用程序中保持一些状态会更好,这样你就知道你在这个过程中走了多远。然后,您可以禁用除“取消登录”之外的所有控件,直到登录完成。请格式化代码,否则,我看不到任何内容。我希望在单个方法中包含所有这些代码。不是两个单独的,因为我希望能够返回一个布尔值来验证连接是否成功。实际上,你可能认为你想要这样,但是当你第一次尝试登录时,你会意识到你不想要它,其他人也不想要。在应用程序中保持一些状态会更好,这样你就知道你在这个过程中走了多远。然后,您可以禁用除“取消登录”之外的所有控件,直到登录完成。为清楚起见,在选择器名称中,您缺少冒号。应该是:
sendSynchronousRequest:returningResponse:error:
尾随冒号很重要。尝试在不使用它的情况下执行选择器,您将得到一个错误:)在选择器名称中,您缺少一个冒号,只是为了清楚起见。应该是:
sendSynchronousRequest:returningResponse:error:
尾随冒号很重要。尝试在不使用它的情况下执行选择器,您将得到一个错误:)