私は多くの完了ブロックを書きましたが、なぜこれが起こっているのかわかりません。適切な引数を指定してブロックを呼び出すと、ブロックベースの関数の制御は進まないはずです。しかし、私の場合はそうしています。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)から戻る必要があります。しかし、代わりに電子メールの長さチェックに進む。私はここで何か間違っていますか?
実際には、関数本体に非同期呼び出しがあります。私は短い投稿のためにそれを投稿しませんでした。私はすでにこれを防ぐためにリターンを追加しました。しかしこれは正しい行動ですか?私は1つの完了が遭遇した後、コントロールは前方に行くのですか? – Nil
なぜそれは進まないのですか?補完ハンドラの呼び出しには魔法はありません。それは単なる関数呼び出しです。実行は他のコード行の後と同様に続きます。そのため、実行パスを変更するには、ここで 'return'が必要です。 – rmaddy
ok。私はいつも使用していたと思うが、そうでなければ完了ブロックを持つブロックであれば、条件の1つだけが実行されたので、これに遭遇したことはない。早速のお返事ありがとうございます。 – Nil