[Résolu] NSIndexPath -> NSInteger

octobre 2014 modifié dans API AppKit #1

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 ?


Réponses

  • AliGatorAliGator Membre, Modérateur
    Bah en même temps l'erreur est plutôt claire.

    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.


  • AliGatorAliGator Membre, Modérateur
    Non. Si tu utilises row tu n'as plus le problème. Ou alors c'est que tu as merdé quelque part, mais comme tu n'as pas mis + de code et que ma boule de cristal est cassée...
  • septembre 2014 modifié #5

    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)


  • AliGatorAliGator Membre, Modérateur
    Ok ça aide trop. Bon bah si tu veux pas nous en dire +, démerde toi alors, qu'est ce que tu veux que je te dise.
  • septembre 2014 modifié #7

    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 ?  B)


     


    p.s. Vu qu'on cause classes iOS, tu as posté dans la mauvaise section.


  • iLandesiLandes Membre
    septembre 2014 modifié #10

    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.


  • septembre 2014 modifié #11

    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.


  • septembre 2014 modifié #12

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    self.window.backgroundColor = [UIColor whiteColor];

    self.principalView = [[TableViewController alloc] init];

    UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:self.principalView];

    self.window.rootViewController = navigationController;
    [self.window makeKeyAndVisible];

    return YES;
    }


    - (void)applicationWillEnterForeground:(UIApplication *)application
    {
    dispatch_async(dispatch_get_main_queue(), ^{
    [self.principalView.tableView reloadData];
    });
    }

    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) ?




  • 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

  • KubernanKubernan Membre
    septembre 2014 modifié #15


    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.


  • septembre 2014 modifié #16

    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)


  • septembre 2014 modifié #17

    Avec la méthode didSelectRowAtIndexPath, vous auriez un moyen de récupérer la cell ?




  • 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)




     


    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.



  • Avec la méthode didSelectRowAtIndexPath, vous auriez un moyen de récupérer la cell ?




     


    Heuuu... il y a une méthode pour ça dans UITableView.

  • septembre 2014 modifié #20

    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.


Connectez-vous ou Inscrivez-vous pour répondre.