[Résolu] NSIndexPath -> NSInteger
ObjectiveSwift
Membre
Bonsoir à tous,
Je souhaite sauvegarder dans une var la cellule sélectionné dans une UITableViewController. Je n'arrive pas à la faire, un NSUInteger ou NSInteger, j'ai un problème du genre :
implicit conversion of 'nsinteger' (aka 'int') to 'nsindexpath' is disallowed with arc
J'ai essayé de créer un NSInteger directement avec mais toujours le même problème.
Avez-vous quelques idées ?
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Ta variable est de type NSInteger (c'est à dire un int) et tu essayes de mettre dedans un objet de la classe NSIndexPath* ou vice-versa. On ne met pas un objet dans un int...
Certes, c'est le cas de NSIndexPath mais si j'utilise row, ça renvois pourtant un NSInteger mais j'ai toujours le même problème.
Eu désolé, j'ai trouvé. L'étoile c'est pas bon pour du int.
Par contre, avant d'aller plus loin, il est possible de récupérer une cell particulière à partir de applicationWillEnterForeground ? (un numéro en particulier donc)
C'est juste que j'ai fais NSInteger *monNumber dans le point h en tant que propriété, d'où l'erreur de conversion.
J'ai donc viré l'étoile et là le indexPath.row fonctionne correctement comme attendu.
Je fais ça à chaque clic (de récupérer le indexPath) de cellule et je stocke le numéro. Maintenant, la question c'est à partir du AppDelegate est-ce que je peux récupérer cette valeur (ça oui puisque j'ai fais une property accessible) et atteindre ma cellule.
J'ai regardé le UITableViewController et je ne vois pas de méthode pour ça (y compris le delegate)
Bah tu peux toujours tout récupérer des variables mais connais tu la notion de singleton ça pourrait vachement t'aider pour ça.
Tu veux accéder à une UITableViewCell à partir de ton App. Delegate ?
p.s. Vu qu'on cause classes iOS, tu as posté dans la mauvaise section.
Salut,
Pour répondre à une question sur du code, bah il faut mettre au moins un morceaux de code si tu veux qu'on t'aide à moins que tu bosse pour la NSA dans ce cas relis le dernier poste d'Ali :-)
--
Sinon il est vrai que les types qui gèrent les entiers et les nombres en général (nsnumber, nsinteger, int, float, double, etc) dans les projets cocoa / c sont souvent source d'emm.rde.
Non mais j'arrive jamais a écrire correctement et donc à m'expliquer clairement, dsl. (a oui et là pour le coup je ne voulais pas cacher mon code)
Bon alors, j'ai contourné le problème mais c'est pas tout à fais fini. Donc comme le AppDelegate a une référence sur le UITableViewController, j'ai donc accès à la TableView et dans la méthode du AppDelegate (méthode applicationWillEnterForegroundle) je fais un reloadData.
Dans le UITableViewController j'ai une property que j'initialisé à -1 dans le init de la classe. Quand je clic sur une Cell je "set"cette propriété en fonction de la valeur indexPath.
Bon maintenant si vous quitte l'App et que vous revenez, le AppDelegate avec sa méthode EnterForeground, je fais un reloadData, comme y a toujours ma propriété, j'ai un if dans cellForRowAtIndexPath pour changer sa couleur.
Alors, premier problème : quand je reviens dans l'App, la couleur est correctement placé mais je ne sais pas (pour le moment) l'enlever.
Deuxième problème : faut que j'enregistre ça dans l'App que si on l'a kill et qu'on revient il faut que cette propriété contienne toujours la valeur. Là , je pense utiliser NSUserDefault mais j'en suis pas là .
Voilà , je veux bien vos pistes et idées.
EDIT : et là je vois pas comment vous montrer le code parce que y en a un peu partout mais si vous comprenez pas ou autre, je peux le faire.
Pour illustration
En gros la question c'est comment récupérer une Cell à partir de la TableView (via un delegate j'imagine)
Ta table view est-elle dynamique (i.e. contient un nombre arbitraire d'objets similaires) ?
Si tu parles de isEqual dans un post précédent on l'a aidé pour mettre en place la méthode et pour comprendre les NSSet. Ainsi que le passage de NSSet à NSArray.
Je crois bien qu'il n'a pas de doublons normalement
Ce n'était pas le sous-entendu de ma question : si effectivement c'est une table dynamique alors sauvegarder l'indexPath est une très mauvaise idée... En effet, son indexPath est, dans ce cas, sensé représenter un objet dans sa table view. Que se passerait-il si son modèle est modifié (ajout/suppression) ? Et bien son indexPath a toutes les chances de pointer sur une cell qui ne correspond plus à l'objet d'origine (voire même une cell qui n'existe plus). C'est la référence à son objet qu'il faut sauvegarder, pas l'indexPath.
Non non, je récupère des données sur le net mais ce sont toujours les mêmes.
Là , j'essaye d'enlever la couleur d'une row sélectionner, je n'y arrive pas. (j'essaye tous les delegate)
Avec la méthode didSelectRowAtIndexPath, vous auriez un moyen de récupérer la cell ?
Il n'empêche... ça serait bien plus judicieux de sauvegarder la référence de ton objet associé à ton indexPath.
Genre un id unique. Ainsi à la restauration de ta table view tu vas chercher l'indexPath de l'objet pour cet id. Avec ça tu es tranquille.
Heuuu... il y a une méthode pour ça dans UITableView.
T'as été plus rapide que moi, je viens de la trouver
Sinon oui c'est bien l'indexPath que je récupère, là faut que je le set dans les prefs utilisateur.