Tengo un Obj-C método similar a este:

-(void)getUserDefaults:(BOOL *)refreshDefaults
{
    PostAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];

    if (refreshDefaults) {
        [appDelegate retrieveDefaults];
    }
}

Cuando me llaman como este no me sale la advertencia:

[self getUserDefaults:NO];

Cuando me llaman como este me sale un aviso:

[self getUserDefaults:YES];

advertencia: pasar argumento 1 de ‘getUserDefaults:’ hace que el puntero de entero sin un elenco

NOTA: siempre me llaman el método de pasar de NO ser el primero, entonces, en algún momento más tarde me pase de SÍ

Puede alguien me relleno sobre cuál es el problema aquí? Gracias.

InformationsquelleAutor macinjosh | 2008-12-19

5 Comentarios

  1. 15

    getUserDefaults toma un BOOL*. Usted no recibe una advertencia cuando se pasa NO porque NO es 0 y 0 es NULO, que es una persona jurídica de tipo BOOL*. SÍ es 1 y la misma conversión no es automáticamente seguro.

    Usted debe hacer getUserDefaults tomar una llanura BOOL, en lugar de un puntero.

  2. 17

    BOOL es un tipo primitivo, no una clase, por lo que su declaración de método debe ser

    -(void)getUserDefaults:(BOOL)refreshDefaults;

    lugar. La razón que usted está recibiendo la advertencia que se es que 0 (que es lo que NO se define a ser) es un puntero válido valor sin un yeso, equivalente a NULL, pero 1 (que es lo que YES se define a ser) no es un puntero válido valor sin un yeso.

    • Punteros a tipos primitivos son perfectamente legales.
    • Sí, pero él no está pasando un puntero a BOOL, que acaba de pasar en un BOOL, que es la razón por la que él está consiguiendo que de error.
  3. 5

    Nunca he visto Obj-C código de antes, pero estoy bastante seguro de que es porque el ‘refreshDefaults’ es un puntero a BOOL mientras que debería ser un BOOL.

    Yo no sé acerca de la tipificación de las reglas en Obj-C, pero parece que NO está definido como 0 y el compilador no tiene problemas de conversión que para un valor de puntero (un puntero NULL.) Ese no sería el caso con el entero ‘1’. (También la nota «si (refreshDefaults)» es válido el código que comprueba el puntero refreshDefaults contra el puntero NULL)

  4. 3

    Bueno gracias! Eso tiene sentido, y fija! Aquí está la versión actualizada del código de referencia:

    -(void)getUserDefaults:(BOOL)refreshDefaults
    {
    PostAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
    
    if (refreshDefaults) {
        [appDelegate retrieveDefaults];
    }
    }
    • Par de cosas rápidas: 1) debes editar tu pregunta original, si usted quiere mostrar código de trabajo o no trabajo, este no es un foro. En segundo lugar, si alguien te ayudó, hay que darles crédito por aceptar su respuesta 🙂
  5. 1

    En el primer caso, NO hay, probablemente, el valor predeterminado es 0 – el puntero null. Esto es válido Bool*. Sí predeterminada es 1, y así, cuando se echa a un Bool* se pasa el entero 1 en – que luego se convirtió en un Bool*.

Dejar respuesta

Please enter your comment!
Please enter your name here