iOS 完成块不返回控制

iOS completion block not returning control

我写了很多完成块,但不确定为什么会这样。如果我们使用适当的参数调用块,则基于块的功能的控制不应继续。但就我而言,它正在这样做。

- (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);
    }
}

如果没有互联网连接,控件应该 return 从第一次出现 completion(NO); 开始。但它会继续检查电子邮件长度。我是不是做错了什么?

如果我理解你的问题,你需要添加一个return

if (! [NetworkConstant appIsConnected])
{
    [[AppThemeManager sharedInstance] showNoInternetMessage];

    completion(NO);

    return;
}

如果没有网络连接,return 会阻止方法的其余部分执行。

似乎也没有理由使用完成处理程序。你的方法里面没有异步处理。

很可能其他时候您调用完成块,它们被放置在其他完成块中,由异步任务调用,在给定的示例中不是这种情况。因此,使用完成块没有意义我如何理解你的例子。

- (BOOL) validateFormWithCompletion:(void(^)(BOOL valid)) completion
{
    if (! [NetworkConstant appIsConnected]) {
        [[AppThemeManager sharedInstance] showNoInternetMessage];

        return 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];

        return NO;
    } else {
        return YES;
    }
}