XCode, предупреждающий: “NSArray не может ответить на-addObject”

В моем заголовочном файле у меня есть этот код:

@interface TableViewController : UIViewController 
{
    IBOutlet UITableView *tblListData;
    NSArray *arryData;
}

В моем файле объявления класса у меня есть эта реализация:

- (void)viewDidLoad 
{
    arryData = [[NSArray alloc] initWithObjects:@"iPhone",@"iPod",@"MacBook",nil];
    [super viewDidLoad];
}

Теперь я получаю этот XCode, предупреждающий: NSArray may not respond to -addObject для следующего кода:

- (IBAction)AddButtonAction:(id)sender
{
    [arryData addObject:@"Mac Mini"];
    [tblListData reloadData];
}

И, конечно же, мой NSArray не отвечает на addObject! :(

Что я должен сделать?

8
задан Steve Harrison 19 January 2010 в 00:54
поделиться

1 ответ

Существует простой способ обеспечить это:

Не связывайтесь с частными членами других экземпляров того же класса.

Серьезно - это вы пишете код Студент .

-121--2501890-

Нет, это необходимо, код метода не специфичен для экземпляра, он специфичен только для типа объекта. (виртуальные методы) или объявленный тип переменной (для невиртуальных методов). С другой стороны, нестатические поля являются специфичными для экземпляра... Вот где у вас изоляция на уровне экземпляра.

Единственное различие между статическим методом и нестатическим методом заключается в том, что статическому методу запрещен доступ к другим основанным на экземплярах (нестатическим) методам или полям. Любой метод, который МОЖЕТ быть сделан статическим без изменения, не будет затронут путь, делая его статичным, за исключением того, что компилятор должен выбрасывать ошибки в любом месте, где он был вызван с помощью синтаксиса на основе экземпляра.

-121--2501897-

Если найти документы, вы увидите, что NSAray фактически является неизменяемым массивом (т.е. его нельзя изменить). Поэтому сообщение -addObject: не реализовано. Вместо этого необходимо использовать NSMuterArray .

37
ответ дан 5 December 2019 в 04:58
поделиться