J'ai passé du temps à chercher d'autres articles similaires mais je n'ai pas pu trouver mon problème exact. Je suis nouveau sur iOS et sur l'objectif c donc c'est probablement très simple.Sélecteur non reconnu sur la sous-classe personnalisée
Je suis le sous-classement UICollectionViewCell:
@interface FooCollectionViewCell : UICollectionViewCell
@property (weak, nonatomic) IBOutlet UILabel *cellLabel;
@end
Et dans mon sous-classe personnalisée de UIViewController, je suis en train de définir une valeur pour cellLabel
:
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
FooCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:reuseIdentifier forIndexPath:indexPath];
// Configure the cell
UILabel *label = [[UILabel alloc] init];
label.text = @"whatever";
cell.cellLabel = label;
return cell;
}
Mon application se bloque lorsqu'il est exécuté:
[UICollectionViewCell setCellLabel:]: sélecteur non reconnu envoyé à l'instance 0x7fef224144f0
Si je comprends cette erreur, il semble qu'il se plaint que je suis en train de définir la propriété cellLabel sur une instance de la superclasse UICollectionViewCell au lieu d'une instance de FooCollectionViewCell la sous-classe.
Cependant, quand j'ajouter un point d'arrêt à cette ligne et regarde mes variables, je vois:
cellule FooCollectionViewCell * 0x7fcb5340dcd0 0x00007fcb5340dcd0
Il semble aussi évident de mon code que l'objet doit être de type FooCollectionViewCell car c'est le type cell
qui est instancié comme.
Mon processus pour la mise en place de mon story-board était:
- Faites glisser un CollectionViewController à mon story-board
- Définissez sa classe personnalisée pour FooCollectionViewController. Cela semble fonctionner parce que mon code est appelé.
- Cliquez sur la cellule prototype créée automatiquement dans la vue de collection créée automatiquement, définissez sa classe personnalisée sur FooCollectionViewCell. Définissez l'identificateur sur "FooCell" et mettez à jour la variable reuseIdentifier dans mon ViewController pour qu'elle soit également "FooCell".
Y at-il quelque chose qui me manque?
Dans votre storyboard/NIB avez-vous défini la classe personnalisée de votre "Table View Cell" à FooCollectionViewCell pour celle avec votre identifiant de réutilisation? – Tom
Utilisez-vous le storyboard ou utilisez le .xib personnalisé si vous utilisez .xib, vous devez enregistrer votre nib dans la méthode viewdidload. Je pense que la cellule est en train de faire mais elle n'attribue pas de valeur essayer de nettoyer construire votre dossier et réinitialiser votre simulateur alors il va résoudre votre problème –
On ne peut pas voir dans votre code, quelle classe est utilisée pour créer l'instance de cellule. Le type de la référence var 'cell' n'a aucune signification. Qu'avez-vous mis votre xib/SB? S'il vous plaît ajouter une vérification sur la classe de la cellule dans votre code à voir, si une autre classe instancie l'objet de la cellule. –