2012-10-25 6 views
1

내 응용 프로그램의 유효성 검사 메서드를 만들고 있습니다. 마우스를 올리면 반환 값에 문제가 있습니다.블록 반환 오류

호환되지 않는 블록 포인터 타입 보내는 문자 ...

-(BOOL)validateEmail{ 

    if (self.ownUser.emailUser != self.emailField) { 
     [UserAPIClient validateEmail:self.emailField sucess:^(BOOL sucess, NSError *error) { 
      if (sucess) { 
       return YES; 
      }else{ 
       NSLog(@"Can´t change e mail, already one is created in the database"); 
       return NO; 
      } 
     }]; 

    }else{ 
     return YES; 
    } 
} 

아무도 나에게이 문제를 해결 도와 드릴까요? 내가 적합한 솔루션을 놓친 completily

사전에

감사합니다 ...

편집, 그냥 BOOL

-(BOOL)validateEmail{ 

if (self.ownUser.emailUser != self.emailField) { 

    return [UserAPIClient validateEmail:self.emailField]; 
}else{ 
    return YES; 
} 

}

에게 돌아 내 UserApiClient을 채택 EDIT 2 얼마 전에 변경하려면이 메서드의 결과가 필요하다는 것을 알았습니다. 어떻게이 메서드를 sync 메서드로 변경할 수 있습니까? 블록이 BOOL 이외의 반환로 선언처럼

[[MYApiClient sharedInstance] getPath:@"validateEmail" parameters:params 
            success:^(AFHTTPRequestOperation *operation, id JSON) { 

             NSLog(@"SUCESS %@", JSON); 
            } 
            failure:^(AFHTTPRequestOperation *operation, NSError *error) { 

             NSLog(@"Error %@", error); 

            }]; 
+0

이 질문에 올바르게 답하기 위해서는'[User validateEmail : sucess :]'선언을 게시하고 그 의미론을 말해야합니다. – trojanfoe

답변

2

, 당신은 __block 변수에 복사 할 수 있습니다

-(BOOL)validateEmail { 

    if (self.ownUser.emailUser != self.emailField) { 
     __block BOOL returnValue; 

     [User validateEmail:self.emailField sucess:^(BOOL sucess, NSError *error) { 
      if (sucess) { 
       returnValue = YES; 
      }else{ 
       NSLog(@"Can´t change e mail, already one is created in the database"); 
       returnValue = NO; 
      } 
     }]; 

     return returnValue; 

    } else { 
     return YES; 
    } 
} 

블록 자체가 (내가 프로토 타입에서 추측와 같은)를 반환하지 않습니다 값. [User validateEmail:sucess:]동 기적으로를 작동하는 경우 returnValue이 때 함수 호출이 반환을 정의되도록이 만 작동합니다

참고.

+1

아니면 더 나은 여전히 ​​[[User ValidateEmail : sucess :]'블록에서 반환 된 무엇이든 반환 ... – trojanfoe

+0

@ 트로이 목마 : 그것은 그 블록이 유효성 검사를위한 완성 블록처럼 더 이상 아무것도 반환하지 않는 것 같았다 . 그러나 그것은 순수한 추측이며 잘못된 것일 수 있습니다. –

+0

동의합니다. 그러나'BOOL'을 반환하면'[User validateEmail : sucess :]'는 단순히 그 것을 되돌릴 수 있으므로 사용하기 쉽습니다 ('__block '지정자를 잊기 쉽습니다). – trojanfoe

1

당신은 방법 [User validateEmail:sucess:] (원문)의 선언을 표시하지 않습니다,하지만 그것은 본다. 당신이 블록의 sucess 외부의 값을 사용하려면