2011-05-12 5 views
7

Tengo un código donde mis clases heredan de una superclase, y todo ha funcionado bien hasta ahora. Obtengo un error cada vez que trato de usar cualquiera de las variables de superclase, diciendo que no están declaradas (primer uso en esta función). Solo está sucediendo en una de mis subclases, &, se ve exactamente igual que las demás. Me pregunto si hay algo obvio que deba saber (ser bastante nuevo en Objective-C). El código básico es como -Extraño error con respecto a las variables de instancia y la superclase

@interface mySuperClass : UIViewController { 

BOOL myVar; 

} 

Entonces -

@interface mySubClass : mySuperClass { 

} 

@implementation mySubClass { 

-(void)someMethod { 

    myVar = YES; // error here 

} 

@end 

Cualquier ayuda muy apreciada - si necesita más información, hágamelo saber! Gracias.

+0

¿Por qué no escribe el error exacto que está teniendo? También eso debería funcionar aparte de los errores tipográficos y los '' fin's faltantes. Publique un ejemplo completo mínimo que reproduzca el problema. –

+0

Sería difícil publicar algo significativo, ya que hay un montón de código, y el programa funciona bien si comente las variables (aparte del efecto que los vars tienen en otras cosas ...). ¡Supongo que podría ser algo más profundo en el código, pero hay tanta cantidad que me sentiría mal publicarlo todo! Voy a reconstruir toda la implementación y ver si obtengo lo mismo. Como digo, otras subclases hechas de la misma manera funcionan bien, estoy tratando de no ponerlas en un error de XCode 4 ... – SomaMan

+0

Hm, tal vez termines con una inclusión extraña que no tiene la instancia var 'myVar' en la interfaz? ¿Podría intentar mirar el archivo fuente preprocesado que tiene el error para ver cómo se ve la definición de interfaz para 'mySuperClass' allí? –

Respuesta

2

No veo nada incorrecto con el código que ha pegado. Mi primera suposición sería que no está importando el archivo .SuperClass .h correctamente. Es decir, que se está perdiendo

#import "mySuperClass.h" //or #include 

En mySubClass.h o mySubClass.m

4

acabo de recibir más de un extraño error muy similar en el que podía acceder a las propiedades ya no en mi superclase, y Xcode me estaba givine errores del compilador que dicen "(*) no declarado (primer uso en esta función)". Sin embargo no tuve ningún problema en el pasado ...

El problema era que había introducido errores tipográficos en la parte superior de mi archivo .m y la salida del compilador xcode me estaba engañando. Específicamente, tenía sentencias @synthesize donde las propiedades estaban mal escritas, ya sea en la declaración de sintetizar o en la variable correspondiente en el archivo de cabecera.

Si tiene declaraciones @synthesize u otras declaraciones, examínelas con un peine de dientes finos (es decir, ¿qué líneas ha introducido más recientemente?), O incluso coméntelas con un bloque para ver si puede volver a compilar y estrechar abajo el culpable.

Una vez más, los errores del compilador fueron muy engañosos, por lo que realmente fue difícil de depurar. Aunque como el 99.9% del tiempo, el error fue mío. :)

+0

+1 Debería leer antes que escribir ;-) al principio no me di cuenta de qué se trata – Kay

+0

Estaba teniendo exactamente el mismo problema, y ​​de hecho el problema era debido a una error en uno de mis métodos @synthesize. –

1

me encontré con el mismo problema y después de perder horas finalmente lo resolvió en mi proyecto:

I refactorizado mi fuente y sacó un miembro, pero se olvidó de quitar la definición @property en el archivo .h. Esto genera errores en todos los lugares cuando utilizo súper miembros. Por cierto: los métodos de Super están bien.

Así que verifique su propiedad. Gracias a Screwtape en post 8 por su solución :-)

EDITAR: Oops, la respuesta de Kris es bastante similar, excepto de los errores tipográficos frente a la eliminación.

1

estoy teniendo el mismo problema durante semanas

"Variable Undeclared" error when compiling to iOS Device, but not for Simulator

Una solución que he encontrado es simplemente cambiar el compilador por defecto de la LLVM GCC 4.2 a LLVM Compiler 2.0 (o `de Apple LLVM compilador 2.1). Parece ser un error en el compilador, pero es solo una suposición.

Cambiarlo es una solución rápida para su problema si no es necesario que use el compilador GCC en absoluto.

Cuestiones relacionadas