initWithFrame: reuseIdentifier: устарел

В моем проекте я получил предупреждение об устаревании, 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 ответа

Решение

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

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

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

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

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

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

 - initWithStyle:reuseIdentifier: 

Тогда ваш цикл if будет выглядеть так

if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault 
              reuseIdentifier:CellIdentifier] autorelease];
}

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

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

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

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

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

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

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

cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault 
                                 reuseIdentifier:CellIdentifier] autorelease];

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

static NSString *SimpleTableIdentifier;

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:SimpleTableIdentifier];

if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero
                                   reuseIdentifier:SimpleTableIdentifier] autorelease];
}
Другие вопросы по тегам