IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Unity/C# - Problème de référence : accès aux données d'un tableau d'objets


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 1
    Par défaut Unity/C# - Problème de référence : accès aux données d'un tableau d'objets
    Bonjour,
    Après avoir chercher un peu partout sur internet et après avoir trituré le problème dans tous le sens,
    je vous présente mon code, je ne sais ni si c'est une étourderie, ni si c'est dû au fonctionnement de Unity/C# ...
    Alors le contexte :
    Je récupère des données brut de ma db puis les affiches sur une page web.
    Je récupère ensuite le contenu de cette page web, puis j'associe ces données à un tableau d'objet "Produit".
    Tout fonctionnait à merveilles , jusqu'à que j'ai eu besoin de récupérer une de ces données via un autre script.
    Au début, je me suis dit, pas de soucis, je récupère le script depuis mon nouveau script, puis accède normalement à mes fameuses données.

    Je commence par faire ce que j'avais en tête dans mon nouveau script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Datas scrDatas = GameObject.Find("panneau").GetComponent<Datas>();
    Debug.Log(scrDatas.produits[4].getId());
    Quelque chose dans l'esprit... (notons que je passe ici par un getter alors que les variables membres de Produit sont publiques ... ).
    Bref, jusque là tout vas bien, la console m'affiche le bon id... Je me dis : "parfait".
    Je commence donc à faire une petite boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
            for(int i=0; i< scrDatas.produits.Length; i++)
            {
                UnityEngine.Debug.Log(scrDatas.produits[i].getId());
            }
    Et là , c'est le drame :
    NullReferenceException: Object reference not set to an instance of an object
    Alors que tous mes ID s'affichent correctement dans la console.
    Et à partir d'ici, j'ai essayé pas mal de chose, mettre mon "panneau" en variable public puis l'assigné via l'éditeur,
    créer un nouvel objet pour chaque étape ( GameObject panneau, Datas script puis Produit[] prodClone ), passer par des getters.
    Puis finalement pour "moins" me prendre la tête je me suis dis : "Bon bah tant pis je fais une méthode membre a Datas qui me retourne le nombre de pages".
    Et là même soucis ...
    Voilà voilà, donc si vous avez une idée pour m'aider à résoudre ce problème je suis preneur !
    Merci d'avance !
    Nom : probRef1.PNG
Affichages : 1176
Taille : 35,4 Ko
    Nom : probRef2.PNG
Affichages : 1318
Taille : 30,0 Ko
    EDIT :
    Bon finalement ce n'était qu'une étourderie, le tableau.Length me retournait 8 alors qu'il n'y avait en fait que 7 élément ( de 0 à 6 )...
    Après une nuit de sommeil et les idées plus clairs, tout devient plus simple
    Seul point que je n'arrive pas à soulever c'est ce retour... Peut-être que lors de mes déclarations, je récupère et donc insère une ligne vide de ma page web?
    Je ne vois pas pourquoi la methode .Length me retournerait le nombre d'élément +1...
    Merci en tout cas !

  2. #2
    Membre expérimenté
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Septembre 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 176
    Par défaut
    Bonjour,

    NullReferenceException : Cela veut dire que tu essaye d'utiliser un objet Null (non instancié) quelque part. Donc déjà, avant de modifier tout ton code dans tous les sens, il faudrait trouver le coupable.

    En admettant que la ligne de code incriminée soit celle-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UnityEngine.Debug.Log(scrDatas.produits[i].getId());
    Il faut que tu vérifie chaque composante de la ligne (UnityEngine, Debug, scrDatas, produits). Je soupçonne UnityEngine d'être le namespace et Debug certainement statique, mais bon comme je ne les connais, je les mets dans le lot.
    Ensuite, si tout est ok avec cette ligne, il va falloir se pencher sur produits qui contient des objets pour lesquels tu appel la méthode getId(), si l'un des objets de la liste est Null, tu as ton coupable.

    Dans ton test console, tu as tester toutes la liste de produits ? Dans l'exemple que tu nous donne, tu test le produits[4] mais le 3, ou le 2 ils sont bon aussi ?

    Enfin bref, commence par rechercher le coupable avant de faire des modifs.

    Bonne continuation.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 07/07/2014, 11h29
  2. Accès aux données d'un tableau par macro
    Par Monfy29 dans le forum QlikView
    Réponses: 2
    Dernier message: 23/11/2012, 17h57
  3. [MVC][SQLServer 2005 trial] problème d'accès aux données
    Par olivier57b dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 01/02/2007, 11h23
  4. problème d'accès aux données sur serveur par poste client
    Par rahan_dave dans le forum Requêtes
    Réponses: 1
    Dernier message: 25/02/2006, 09h13
  5. Problème de concurence d'accès aux données
    Par ruman dans le forum Access
    Réponses: 2
    Dernier message: 20/02/2006, 13h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo