Это потому, что ваша собственность должна соответствовать фактическому типу класса ivar.
Возможное решение / обходной путь:
//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
Вы добавляете частное свойство mutableArray
в расширение класса и делаете общедоступным array
просто перенаправление на ваше личное изменяемое свойство.
С последними расширениями языка ObjC я склонен удалить
{
NSMutableArray* mutableArray;
}
Блок Ивара полностью, если это возможно.
И определить ivar через синтез, как таковой:
@synthesize mutableArray = _mutableArray;
, который сгенерирует для вас экземпляр NSMutableArray *_mutableArray;
.