2012-07-12 6 views
5

Necesita ayuda para declarar e implementar un método con bloques pero sin parámetros. suena simple, pero me falta algo porque esto funciona:Declarar e implementar un método iOS con bloques, pero ningún otro parámetro

- (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 
{ 

} 

Y esto no se compilará, ya que está esperando un cuerpo de método:

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

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

} 

aprecio la ayuda.

+2

Los nombres de los métodos deben comenzar con una letra minúscula .... – bbum

Respuesta

12

Los bloques son parámetros. Entonces quieres una firma de método con dos parámetros. Trate ej .:

- (void) RetrieveDevicesWithSuccess:(void (^)(NSMutableArray *devices))success 
          failure:(void (^)(aylaError *err))failure; 
+0

Muchas gracias. Eso sí funciona como se esperaba – Dan

+0

¿Qué pasa si quiero combinar el éxito y el fracaso en un bloque de finalización? –

1

El problema es la nueva línea y espacios en blanco entre "RetrieveDevices" y "éxito"/"fracaso". Tal vez puedas probar:

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

} 
0

Se podría hacer algo como:

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

El problema no es la sintaxis del bloque, que es la sintaxis de declaración de método del segundo ejemplo. Un método con ningún parámetro se declara como:

- (RETURN_TYPE)method_name 

y un método con los parámetros se declara como:

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

El primer ejemplo tiene la sintaxis correcta, con un tipo de retorno void, y tres parámetros , el segundo ejemplo tiene un espacio después del nombre del método, por lo que el compilador espera el cuerpo del método (que interpreta como un método sin parámetros).

También tenga en cuenta que, por convención, los nombres de métodos comienzan con una letra minúscula.

Cuestiones relacionadas