iOS 完成块不返回控制权

nr5*_*nr5 1 objective-c ios objective-c-blocks completionhandler

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

- (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);
    }
}
Run Code Online (Sandbox Code Playgroud)

如果没有 Internet 连接,则控件应从第一次出现完成 (NO); 时返回。但相反,它前进到电子邮件长度检查。我在这里做错了吗?

rma*_*ddy 5

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

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

    completion(NO);

    return;
}
Run Code Online (Sandbox Code Playgroud)

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

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