0

ブロックについてかなりの時間をかけて読んできましたが、何らかの理由でブロックを完全に理解するのは非常に困難です。私は初心者の開発者ですが、ブロックは私が出会った最初の本当の「ブロック」なので、助けてくれるかもしれません。

オブジェクト(ViewControllerのインスタンス)が(クラスメソッドを介して)クラスと通信している場合があります-これは、データを要求/取得するために設定したユーティリティクラスです)。ブロックを使ってコールバックのあるメソッドを実装したい。これが私のコードに基づいた現在の「理解」です。

  • ブロックはメソッド引数として渡すことができます。
  • ブロックは関数のように呼び出すことができます。

OK、これが私のユーティリティ クラスの (簡略化された) メソッドです。

+ (void)getDataWithCompletion:(void (^)(BOOL))completion {

    //Some code...
    completion(YES);
}

これは、viewController からメソッドを呼び出す方法です。

[ClassName getDataWithCompletion:^(BOOL gotData) {

    if (gotData) {
        NSLog(@"Called");
    }
}];

当然のことながら、コンソールに NSLog が出力されることを期待していましたが、残念ながら...ここで何か間違ったことをしていることはわかっています。誰か指摘してもらえませんか? 新人レベルの説明は大歓迎です。

4

1 に答える 1

-1

間違いは本当に簡単です。パラメータ名を忘れました。
メソッドをこれに変更します。
(BOOL gotData)これはあなたが見逃したものです。

+ (void)getDataWithCompletion:(void (^)(BOOL gotData))completion {

    //Some code...
    completion(YES);

}

これはアップルのドキュメントアップルブロックのドキュメントへのリンクです

于 2013-07-23T16:19:58.813 に答える