iPhone Objective-C: объединение методов вместе - PullRequest
1 голос
/ 13 июля 2010

Я - полный нуб на объективе-C, так что это может быть очень глупым вопросом для многих из вас.

В настоящее время у меня есть вид с кнопкой «SignIn», которая при нажатии активирует IBAction sigupUp, который я определил ниже. По сути, этот метод должен выполнить вызов 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. Я хочу иметь весь этот код в одном методе. Не два отдельных, так как я хочу иметь возможность вернуть логическое значение, подтверждающее, было ли соединение успешным или нет.

Если бы кто-то мог сказать мне, как кодировать эту процедуру в один метод, я был бы очень признателен.

1 Ответ

1 голос
/ 13 июля 2010

Если вы действительно хотите, чтобы код был все в одном методе, вы говорите о потенциальной блокировке всего пользовательского интерфейса и т. Д. В синхронном HTTP-запросе метода и ответном вызове.

Метод для помещения всего этого "inline": sendSynchronousRequest: returningResponse: ошибка в 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...

Я бы лично посоветовал вам взглянуть наальтернатива большинству подобных вещей асинхронным методам.

...