Lo siguiente parece bastante simple. Hay una superclase con un Ivar, y una subclase que accede a la (@protected) superclases Ivar:¿Por qué una subclase @property sin ivar correspondiente ivar oculta superclases ivars?
// Testclass.h
@interface TestClass : NSObject {
NSString *testIvar;
}
@end
//TestClass.m
@implementation TestClass
@end
//TestSubclass.h
@interface TestSubClass : TestClass {
}
@property (nonatomic, retain) NSString *testProperty;
- (void) testMethod;
@end
//TestSubclass.m
#import "TestSubClass.h"
@implementation TestSubClass
@synthesize testProperty;
- (void) testMethod{
NSLog(@"The value was: %@", testIvar);
}
@end
suficientemente simple y de apariencia correcta. Sin embargo, intentar compilar (para iOS 4.2 SDK, con GCC 4.2) produce este error apuntando a la línea NSLog: 'testIvar no declarado'.
Soy nuevo en Objective-C, pero no puedo ver por qué esto debería ser un error. Comente las cosas de testProperty y compila OK. Parece que agregar una propiedad sintetizada en una subclase, sin un ivar correspondiente, en realidad está ocultando una superclase no relacionada ivar.
¿Alguien me puede aclarar qué está pasando aquí? Relacionado, ¿era el error de compilación previsible? (Previendo que me hubiera ahorrado algo de tiempo y frustración).
Gracias. Había tenido la intención de probar LLVM de todos modos, así que aquí está la ocasión. He marcado la respuesta porque sugirió una solución y, presumiblemente, solo los desarrolladores de GNU y/o Apple conocerán la verdadera causa. – Cris
Me encontré con el mismo problema. Extraño. LLVM ftw – logancautrell
Se metió en el mismo problema también. Nunca usó LLVM y descubrió que es mejor – edo42