많은 완료 블록을 작성했지만 왜 이런 일이 발생하는지 확신 할 수 없습니다. 적절한 인수를 가진 블록을 호출하면 블록 기반 함수의 제어가 진행되어서는 안됩니다. 하지만 제 경우에는 그렇게하고 있습니다.iOS 완료 블록이 제어를 반환하지 않음
- (void) validateFormWithCompletion: (void(^)(BOOL valid)) completion
{
if (! [NetworkConstant appIsConnected])
{
[[AppThemeManager sharedInstance] showNoInternetMessage];
completion(NO);
}
emailIdTF.text = [emailIdTF.text trimWhiteSpaceAndNextLine];
if (emailIdTF.text.length == 0)
{
[[AppThemeManager sharedInstance] showNotificationWithTitle:@"Incomplete" subtitle:@"Please fill in a valid email id" duration:durationForTSMessage withTypeOfNotification:notificationWarning];
completion(NO);
}
else
{
completion(YES);
}
}
인터넷에 연결되어 있지 않으면 컨트롤은 첫 번째 완료 (NO)에서 돌아갑니다. 그러나 대신 전자 메일 길이 확인으로 이동합니다. 내가 여기서 뭔가 잘못하고있는거야?
실제로 함수 본문에 비동기 호출이 있습니다. 나는 짧은 지위 때문에 그것을 게시하지 않았다. 나는 이것을 방지하기 위해 이미 수익을 추가했다. 그러나 이것이 올바른 행동입니까? 나는 한 번의 완료 만남 후에 통제가 앞으로 진행된다는 것을 의미합니까 ?? – Nil
왜 앞으로 나아갈 수 없습니까? 완료 핸들러를 호출 할 때 마술은 없습니다. 함수 호출 일뿐입니다. 실행은 다른 모든 코드 행 다음과 동일하게 계속됩니다. 그래서 실행 경로를 변경하려면 여기에'return'이 필요합니다. – rmaddy
확인. 나는 내가 항상 사용했다고 생각한다. 그렇지 않으면 완성 블록을 가진 블록 인 경우, 조건 중 하나만 실행되고 이것이 결코 발생하지 않는다. 빠른 답변 감사합니다. – Nil