initWithFrame: reuseIdentifier: устарел - PullRequest
       23

initWithFrame: reuseIdentifier: устарел

30 голосов
/ 06 августа 2011

В моем проекте есть предупреждение об устаревании, initWithFrame: reuseIdentifier: устарело

Я не знаю, что это значит, может кто-нибудь сказать мне, как разрешить это предупреждение, спасибо

вот краткий код

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
    }

    // Set up the cell...
    NSString *cellValue = [itemsList objectAtIndex:indexPath.row];
    cell.textLabel.text = cellValue;

    return cell;
}

, и предупреждение находится на этой строке:

cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];

Ответы [ 4 ]

60 голосов
/ 06 августа 2011

Взгляните на страницу Apple

Здесь выделенные красным цветом функции и свойства будут удалены Apple в будущем в следующем SDK.

, чтобы избежать их при создании приложения.

Поскольку нам нужен долгосрочный проект, который должен работать без сбоев.

устаревший методозначает, что он был заменен / удален, но все еще действует в текущей версии языка.этого следует избегать и может вызвать проблемы / ошибки.проверьте документацию, в которой должен быть указан альтернативный метод, который вы можете использовать.

Здесь вы должны использовать метод

 - initWithStyle:reuseIdentifier: 

Тогда ваш цикл if будет выглядеть следующим образом

if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault 
              reuseIdentifier:CellIdentifier] autorelease];
}
9 голосов
/ 27 августа 2012

Эта проблема появляется в начале разработки IOS 5 Марком, Наттингом и Ла Маршем.Некоторые читатели могут прийти сюда из той книги, где устаревший код появляется на стр. 265. Они могут предположить, что их вина!

cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier: sectionsTableIdentifier] autorelease];

необходимо заменить на (как указывают авторы выше)

cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier: sectionsTableIdentifier];

Обратите внимание, что я также удалил авто-релиз, потому что функция автоматического подсчета ссылок ему не нравится!

Надеюсь, это поможет.

1 голос
/ 06 июня 2012

Используйте этот код:

cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault 
                                 reuseIdentifier:CellIdentifier] autorelease];
0 голосов
/ 19 июля 2012

Это должно решить вашу проблему:

static NSString *SimpleTableIdentifier;

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:SimpleTableIdentifier];

if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero
                                   reuseIdentifier:SimpleTableIdentifier] autorelease];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...