web-dev-qa-db-fra.com

initWithFrame: reuseIdentifier: est obsolète

Dans mon projet, j'ai un avertissement de dépréciation, initWithFrame: reuseIdentifier: est obsolète

Je ne sais pas ce que cela signifie, quelqu'un pourrait-il me dire comment résoudre cet avertissement merci

voici le code court

- (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;
}

et l'avertissement est sur cette ligne:

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

Jetez un œil à la page d'Apple

Ici, les fonctions et propriétés surlignées en rouge seront supprimées à l'avenir par Apple dans le SDK à venir.

afin que nous les évitions lors de la création de l'application.

Parce que nous avons besoin d'un projet à long terme qui devrait fonctionner sans crash.

une méthode obsolète signifie qu'elle a été remplacée/retirée mais qu'elle est toujours valide dans la version actuelle de la langue. il doit être évité et peut provoquer des problèmes/erreurs. consultez la documentation qui doit répertorier une méthode alternative que vous pouvez utiliser.

Ici, vous devez utiliser la méthode

 - initWithStyle:reuseIdentifier: 

Ensuite, votre boucle if ressemblerait à ceci

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

Ce problème apparaît dans Beginning IOS 5 Développement par Mark, Nutting et La Marche. Certains lecteurs peuvent venir ici de ce livre où le code obsolète apparaît à la page 265. Ils peuvent supposer que la faute est la leur!

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

doit être remplacé par (comme le soulignent les contributeurs ci-dessus)

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

Notez que j'ai également supprimé la libération automatique parce que le comptage de référence automatique ne l'aime pas!

J'espère que cela t'aides.

9
Tim

Utilisez ce code:

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

Cela devrait résoudre votre problème:

static NSString *SimpleTableIdentifier;

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:SimpleTableIdentifier];

if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero
                                   reuseIdentifier:SimpleTableIdentifier] autorelease];
}
0
user1286543