2012-07-12 9 views
5

Serve aiuto per la dichiarazione e l'implementazione di un metodo con blocchi ma senza parametri. Sembra semplice, ma mi manca qualcosa perché questo funziona:Dichiarare e implementare un metodo iOS con blocchi, ma nessun altro parametro

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

} 

E questo non verrà compilato come è in attesa di un corpo del metodo:

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

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

} 

apprezzato l'aiuto.

+2

I nomi dei metodi devono iniziare con una lettera minuscola .... – bbum

risposta

12

I blocchi sono parametri. Quindi vuoi una firma del metodo con due parametri. Prova ad es .:

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

Molte grazie. Questo funziona davvero come previsto – Dan

+0

Cosa succede se voglio unire successo e fallimento in un blocco di completamento? –

1

Il problema è il ritorno a capo e gli spazi tra "RetrieveDevices" e "successo"/"fallimento". Prova a modificare:

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

} 
0

Si potrebbe fare qualcosa di simile:

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

Il problema non è la sintassi del blocco, è la sintassi dichiarazione del metodo del secondo esempio. Procedimento senza parametro viene dichiarata come:

- (RETURN_TYPE)method_name 

e un metodo con parametri viene dichiarata come:

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

Il primo esempio è la sintassi corretta, con un tipo di ritorno void e tre parametri , il secondo esempio ha uno spazio dopo il nome del metodo, motivo per cui il compilatore si aspetta che il corpo del metodo (che interpreta come un metodo senza parametro).

Si noti inoltre che, per convenzione, i nomi dei metodi iniziano con una lettera minuscola.

Problemi correlati