방금 최근에 ASIHttpRequest 라이브러리에서 AFNetworking으로 전환했습니다. 나는 단순함을 정말 좋아하지만, 여전히 비동기 코드를 구조화하는 방법을 이해하기 위해 고심하고있다.컨트롤러에 비동기 네트워킹 코드 구성
이 가입 고려하십시오.
- 먼저 입력 된 이메일 주소가 사용 가능한지 확인하고 싶습니다.
- 다음 입력 한 사용자 이름이 사용 가능한지 확인하고 싶습니다.
- 위의 내용이 모두 유효하고 사용 가능한 경우 실제 가입 신청서를 제출하고 싶습니다.
내 코드는 다음과 같습니다.
- (void)signUp{
BOOL hasValidEmail = [self validateEmail:email];
BOOL hasValidUsername = [self validateUsername:username];
if(!hasValidEmail){
NSLog(@"Invalid email");
return;
}
if(!hasValidUsername){
NSLog(@"Invalid username");
return;
}
if (hasValidEmail && hasValidUsername) {
NSLog(@"Go ahead and create account");
}
}
네트워킹 방법의 비동기 특성을 고려하여 구조화하는 방법을 잘 모르겠습니다. 이전의 두 가지 가용성 검사가 응답을 받기 전에 마지막 상태에 도달하는 경우가 많습니다.
가능 여부 확인 방법과 같이 보일 것이다 : 어쩌면
- (BOOL)validateEmail:(NSString*)email{
__block NSString* emailAlreadyExists = @"";
NSString* url = [NSString stringWithFormat:@"user/emailexists/%@", email];
[[APIClient sharedClient] getPath:url parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
emailAlreadyExists = [responseObject valueForKey:@"exists"];
} failure:^(AFHTTPRequestOperation *operation, NSError* error) {
NSLog(@"Email availability check failed: %@", error.localizedDescription);
}];
if([emailAlreadyExists isEqualToString:@"true"]){
return NO;
}
return YES;
}
가 개선 필요가 내 블록 기술을이다,하지만 난 정말 당신이이 같은 시나리오를 구성 할 방법을 듣고 싶습니다?
코드 샘플이 "좋음"이지만 실제로 알고있는 패턴이나 좋은 기술을 찾고 있습니다.
감사합니다.
이것은 정확히 내가 찾고있는 종류의 설정이었습니다. 실제로 나는 블록을 읽을 필요가있다. 고맙습니다. –