iOS完成块不返回控件

时间:2017-01-26 05:33:41

标签: ios objective-c objective-c-blocks completionhandler

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

<style>img{width:40%}</style>
<img src="https://images-na.ssl-images-amazon.com/images/G/01/img15/pet-products/small-tiles/23695_pets_vertical_store_dogs_small_tile_8._CB312176604_.jpg" />

如果没有互联网连接,控件应从第一次完成时返回(NO);.但它转而进行电子邮件长度检查。我在这里做错了吗?

2 个答案:

答案 0 :(得分:4)

如果我理解您的问题,则需要添加return

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

    completion(NO);

    return;
}

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

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

答案 1 :(得分:0)

很可能在其他时候你调用了完成块,它们被放置在异步任务调用的其他完成块中,而在给定的例子中并非如此。因此,使用完成块对我理解你的例子没有意义。

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