0

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:

  1. Faites glisser un CollectionViewController à mon story-board
  2. Définissez sa classe personnalisée pour FooCollectionViewController. Cela semble fonctionner parce que mon code est appelé.
  3. 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?

+2

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

+0

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 –

+0

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. –

Répondre

0

vous dites que vous suivez le tutoriel. Avez-vous fait ces étapes? Avec les classes de vues de collection de base implémentées et associées aux objets de storyboard, il est maintenant temps de concevoir la cellule. Il s'agit simplement de faire glisser et de déposer des éléments de la bibliothèque d'objets sur la cellule prototype dans la vue du storyboard. De plus, la taille de la cellule peut être modifiée en la sélectionnant et en utilisant les poignées de redimensionnement résultantes. La conception exacte de la cellule dépend entièrement de ce qui doit être affiché. Pour les besoins de cet exemple, cependant, chaque cellule va simplement afficher une image. Parce que vous créez une nouvelle étiquette dans le code, alors qu'elle devrait déjà être disponible dans la cellule prototype. Vous devez seulement assigner cell.cellLabel.text = @ "bla bla";

UILabel *label = [[UILabel alloc] init]; 
label.text = @"whatever"; 
cell.cellLabel = label; 
+0

même cela ne fonctionnait pas. Le problème était que j'avais une déclaration contradictoire dans le code en enregistrant la super classe UICollectionViewCell avec mon identifiant de réutilisation. Ce que vous avez mentionné était un deuxième problème que j'avais à faire pour voir le texte changer – mpuncel

0

J'ai trouvé le problème. Quand je crée mon avis sous-classe du contrôleur le fichier a automatiquement

[self.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:reuseIdentifier]; 

dans ma méthode de viewDidLoad. Donc je pense que c'était en train de changer ce que je faisais dans mon storyboard. FML mais j'ai appris quelque chose. Merci pour l'aide!

Le correctif était de supprimer cette ligne depuis que je la configure dans mon story-board.