Das folgende scheint einfach genug. Es gibt eine übergeordnete Klasse mit einem Ivar, und eine Unterklasse, die greift die (@protected) Super Ivar:Warum versteckt eine Unterklasse @property ohne entsprechende ivor superclass 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
Einfach und korrekt wirkenden genug. Der Versuch, zu kompilieren (für iOS 4.2 SDK mit GCC 4.2), erzeugt jedoch diesen Fehler, der auf die NSLog-Zeile verweist: "testIvar undeclared".
Ich bin neu in Objective-C, aber kann nicht für das Leben von mir sehen, warum dies ein Fehler sein sollte. Kommentieren Sie testProperty und geben Sie OK ein. Es scheint, als würde das Hinzufügen einer synthetisierten Eigenschaft in einer Unterklasse ohne einen entsprechenden Ivar tatsächlich eine nicht verwandte Oberklasse-Ivar verbergen.
Kann mir jemand aufklären, was hier passiert? In Zusammenhang damit war der Kompilierungsfehler vorhersehbar? (Voraussichtlich hätte es mir einige Zeit und Frustration erspart).
Danke. Hatte Sinn, LLVM sowieso zu versuchen, also hier ist der Anlass. Ich habe die Antwort "markiert", da Sie eine Fehlerbehebung vorgeschlagen haben. Vermutlich werden nur die GNU- und/oder Apple-Entwickler die wahre Ursache kennen. – Cris
Ich stieß auf das gleiche Problem. Seltsam. LLVM ftw – logancautrell
Ran in das gleiche Problem auch. Habe LLVM nie benutzt und festgestellt, dass es besser ist – edo42