2012-02-03 17 views
5

He declarado una función con entrada booleana var. No obtengo errores Sin embargo, al llamarlo desde otro controlador, aparece la notificación: "entero incompatible a la conversión del puntero enviando'BOOL 'al parámetro de tipo BOOL". ¿Qué estoy haciendo mal? Gracias.ios boolean var declaration

- (void)composeBar: (BOOL *)savePars 

desde otro punto de vista:

AppDelegate *localFunction = [[UIApplication sharedApplication] delegate]; 

[localFunction composeBar:YES]; 

Respuesta

9

BOOL* no es un valor booleano. Es un puntero a un booleano. Sólo tiene que utilizar

- (void)composeBar:(BOOL)savePars 

Es probable confundido porque todos los objetos Obj-C se declaran con la *, pero eso es porque son en realidad punteros. Sin embargo, BOOL no es un objeto, en realidad es solo char que contiene 0 o 1. Del mismo modo que se usaría para int un entero en lugar de int* (o en un código más idiomática, NSInteger), se utiliza en lugar de BOOLBOOL*.

4

Esto se debe a que declaró la función como tomar un puntero a boolean, no un booleano. Esta es la forma en la declaración debe ser:

- (void)composeBar: (BOOL)savePars 

* acompaña tipos de ID (es decir, los que se definen a través @interface/@implementation). Los tipos de C normales, enumeraciones, estructuras, etc. no necesitan un * en la declaración, a menos que realmente desee pasar un puntero.