6
votes

"Self '" alors qu'il n'est pas défini sur le résultat de' [(Super ou auto) init ...] 'Quand j'initialise la cellule personnalisée

Dans CustomCell.m I Définissez la méthode init dans laquelle je veux charger une cellule à partir de l'IB:

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

cell=[[CustomCell alloc]init];
return cell;


0 commentaires

4 Réponses :


9
votes

Vous écrivez auto code> (renvoyé de Super init code>) avec l'objet renvoyé de votre tableau. Si vous souhaitez charger une cellule personnalisée à partir d'une nib, faites-la dans votre méthode CellfrotIndExpath ou créez une méthode de classe de commodité sur votre cellule personnalisée qui se charge à partir du NIB:

dans votre celltfrowortindexPath: P>

+(CustomCell*)cell
{
    NSArray *nib =[[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:self options:nil];         
    return [nib objectAtIndex:0];
}


6 commentaires

Merci, mais avant Cell = [CustomCell NewCell]; Ai-je besoin d'une cellule init: cellule = [[CustomCell Alloc] init];


J'ai fait comme vous avez expliqué, et maintenant j'ai eu ça! Au lieu de précédent: l'objet avec +0 retenir les comptes retournés à l'appelant où un +1 (possède) retenir le nombre est attendu


Oh oui, je l'ai appelé Newkell, quel arc se plaint de. Je vais mettre à jour la réponse, désolé.


Et non, vous n'avez pas besoin d'alloc / init, la cellule est mise en mémoire en chargement de la nib.


Mais si je fais la même chose pour la cellule, mais pour l'en-tête personnalisé, que dois-je écrire au lieu de la cellule + (CustomCell *)? + (Personnaliséheader *) Voir?


Si vous aimez, oui - vous devez mettre une méthode de classe similaire dans la classe de votre en-tête View.



8
votes

Gardez votre méthode init comme ci-dessous et effectuez la liaison dans le générateur d'interface

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"CustomCell";

    CustomCell *cell = (CustomCell *) [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:self options:nil];

        for (id currentObject in topLevelObjects){
            if ([currentObject isKindOfClass:[UITableViewCell class]]){
                cell =  (CustomCell *) currentObject;
                break;
            }
        }
    }
}


1 commentaires

Merci pour la réponse, je connais cette méthode mais je préfère avoir la méthode init dans la cellule.



1
votes

Ce que je fais est xxx

puis dans la classe principale xxx

pour moi cela fonctionne bien et dans Produit -> Analyser ne donne aucun avertissement ni erreur


0 commentaires

1
votes

J'ai rencontré le même problème, je l'ai réparé en supprimant le code qui aime xxx

dans la méthode init de la définition de la définition de CustomView.

Mettez ce code à la endroit où vous créez la coutume.


0 commentaires