5

ブロックはあるがパラメーターはないメソッドの宣言と実装についてサポートが必要です。単純に聞こえますが、これが機能するため、何かが足りません。

- (void) RetrieveDevices: (NSInteger)count
         success:(void (^)(NSMutableArray *devices))success
         failure:(void (^)(aylaError *err))failure;

- (void)RetrieveDevices:(NSInteger)count
        success:(void (^)(NSMutableArray *devices))successBlock
        failure:(void (^)(aylaError *err))failureBlock
{

}

そして、これはメソッド本体を想定しているためコンパイルされません。

- (void) RetrieveDevices
             success:(void (^)(NSMutableArray *devices))success
             failure:(void (^)(aylaError *err))failure;

- (void)RetrieveDevices
            success:(void (^)(NSMutableArray *devices))successBlock
            failure:(void (^)(aylaError *err))failureBlock
{

}

ヘルプに感謝します。

4

4 に答える 4

12

ブロックはパラメーターです。したがって、2 つのパラメーターを持つメソッド シグネチャが必要です。例を試してください:

- (void) RetrieveDevicesWithSuccess:(void (^)(NSMutableArray *devices))success
                            failure:(void (^)(aylaError *err))failure;
于 2012-07-12T22:20:51.670 に答える
1

問題は、「RetrieveDevices」と「success」/「failure」の間の改行と空白です。代わりにこれを試してください:

- (void)RetrieveDevicesOnSuccess:(void (^)(NSMutableArray *devices))successBlock
                       onFailure:(void (^)(aylaError *err))failureBlock
{

}
于 2012-07-12T22:21:00.960 に答える
0

次のようなことができます:

- (void) RetrieveDevicesSuccess:(void (^)(NSMutableArray *devices))success
                        failure:(void (^)(aylaError *err))failure;
于 2012-07-12T22:21:03.120 に答える
0

問題はブロック構文ではなく、2 番目の例のメソッド宣言構文です。パラメータのないメソッドは次のように宣言されます。

- (RETURN_TYPE)method_name

パラメータを持つメソッドは次のように宣言されます。

- (RETURN_TYPE)method_name_part1:(PARAMETER_TYPE1)parameter1 name_part2:(PARAMETER_TYPE2)parameter2...

最初の例は正しい構文で、戻り値の型が void で、3 つのパラメーターがあります。2 番目の例では、メソッド名の後にスペースがあります。これが、コンパイラーがメソッドの本体を期待する理由です (パラメーターなしのメソッドとして解釈します)。 .

また、慣例により、メソッド名は小文字で始まることに注意してください。

于 2012-07-12T22:27:28.897 に答える