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