Das liegt daran, dass Ihre Eigenschaft mit dem Klassentyp des aktuellen Ivars übereinstimmen muss.
Eine mögliche Lösung/Workaround:
//Foo.h:
@interface Foo
{
NSMutableArray* mutableArray;
}
@property (readwrite, nonatomic, retain) NSArray* array;
//or manual accessor declarations, in case you're picky about wrapper-properties.
@end
//Foo.m:
@interface Foo ()
@property (readwrite, nonatomic, retain) NSMutableArray* mutableArray;
@end
@implementation
@synthesize mutableArray;
@dynamic array;
- (NSArray *)array {
return [NSArray arrayWithArray:self.mutableArray];
}
- (void)setArray:(NSArray *)array {
self.mutableArray = [NSMutableArray arrayWithArray:array];
}
@end
Sie fügen eine private mutableArray
Eigenschaft in einer Klassenerweiterung und die öffentliche array
einfach an Ihren privaten veränderbaren weiterleiten.
Mit den neuesten Spracherweiterungen von ObjC neige ich dazu, die
{
NSMutableArray* mutableArray;
}
ivar-Block nach Möglichkeit vollständig zu entfernen.
Und definieren Sie den Ivar durch die Synthese als solche:
@synthesize mutableArray = _mutableArray;
die eine NSMutableArray *_mutableArray;
Beispiel für Sie.