2012-07-12 11 views
5

Potrzebujesz pomocy przy deklarowaniu i implementacji metody z blokami, ale bez parametrów. Brzmi prosto, ale czegoś mi brakuje, bo to działa:Deklaracja i implementacja metody iOS z blokami, ale bez innych parametrów.

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

} 

I nie będzie to skompilować, gdyż spodziewa ciało metoda:

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

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

} 

Doceń pomoc.

+2

Nazwy metod powinny zaczynać się od małej litery ... – bbum

Odpowiedz

12

Bloki są parametrami. Więc chcesz podpis metody z dwoma parametrami. Spróbuj np .:

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

Wielkie dzięki. To rzeczywiście działa zgodnie z oczekiwaniami. – Dan

+0

Co zrobić, jeśli chcę połączyć sukces i porażkę w jeden blok ukończenia? –

1

Problemem jest to znak nowej linii i odstępy między „RetrieveDevices” i „sukces”/„awarii”. Spróbuj to zamiast:

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

} 
0

Można zrobić coś takiego:

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

Problemem nie jest składnia blok, to składnia deklaracji Sposób według drugiego przykładu. metodę z żadnym parametrem jest uznany jako:

- (RETURN_TYPE)method_name 

i sposób parametrów jest uznany jako:

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

Pierwszy przykład ma prawidłową składni z typem nieważne powrotu, a trzy parametry drugi przykład ma spację po nazwie metody, dlatego kompilator oczekuje treści metody (którą interpretuje jako metodę bez parametrów).

Należy również zauważyć, że zgodnie z konwencją nazwy metod zaczynają się od małej litery.