iOSでブロックを使用する方法を理解しようとしています。私はAppleのドキュメントを読みましたが、いつものように、それらは曖昧で不完全であり、いくつかの重要な情報は言及されていません。私も成功せずにググった。これは私がそれを理解するための練習としてやろうとしていることです。
文字列を読み取り、その文字列を前回の読み取りと比較するためのブロックを作成しました。文字列が同じでない場合はYESを返し、同じ場合はNOを返します。
これは私がした方法です:
私はこれを.hで宣言しました
BOOL (^differentStrings)(void);
これを.mで、viewControllerのviewDidLoad内で宣言しました
__block NSString * previousString;
__block NSString * currentString;
differentStrings = ^(void){
currentString = [self getString];
NSLog(@"%@", currentString); // not printing anything on console
if (![currentString isEqualToString:previousString]) {
previousString = currentString;
return YES;
} else {
return NO;
}
};
これが私が使用する方法です:私はこれを行うスレッドを持っています:
if (differentStrings)
NSLog (@"strings are different);
これらは私が持っている問題です:
- ブロックは常にYESを返します(文字列は異なります)
- これをvideDidLoad内で宣言するのは気が進まない。これをメソッドとしてグローバルに使用できるように、どのように宣言する必要がありますか?メソッドの場合と同じようにこれを配置する必要がありますか?
- ブロック内でメソッド「getString」を呼び出しています。大丈夫ですか?
- .mでブロック変数を宣言するのは奇妙だと思います。ご覧のとおり、ブロック変数を.hで宣言してから、.mで使用する必要があります。私はそれをやろうとしましたが、エラーが発生しました。
- ブロックの最初の行にデバッグポイントを設定しましたが、そこで停止していません。
- ブロック内のNSlog行は何も出力しません。ブロックが呼び出されていませんか?
皆さん、これを手伝ってくれませんか?