Je t'avoue que le "débat" est ma foi fort très intéressant, et je prends note pour mes projets et expériences futurs, cependant mon problème de base n'est toujours pas réglé, donc je veut bien un peu d'aide s'il vous plait ^^
AliGator je viens de penser à un truc ma requête synchrone est posté dans le 1er message de ce sujet
Bah en fait ça me chagrine, car mes labels restent avec la valeur par défaut, donc je me suis dit que l'erreur venait peut être de la mais visiblement c'est pas le cas.
Je continue de chercher, si jamais vous voyez faites moi signe.
Ps: J'ai juste modifié et changé en "[self searchMemberInfo];" dans initWithNibName
Edit: Chose étonnante ma liste est tout le temps vide, bizarre quand j'utilisais la manière synchrone avec une manière identique ça fonctionnait
Edit 2: Bon visiblement il ne rentre jamais dans la boucle for
Edit 3: ma variable strResult est vide, WTF ?
Edit 4: Si dans strResult, je remplace "data" par "requestData" ça m'affiche null
Edit 5: Data m'affiche <5b5d>
Voila le dernier problème en date, et merci de chercher à m'aider Larme
Dans ton for du deuxième block de code celui de l'asynchrone tu fais pas le
- [_list addObject:arrayTemp]
je sais pas si ça peut jouer mais vu que tu fais un test sur sa taille par le suite je penses que ça doit pas aider quand même.
Enfin je penses que tu peux arranger tout ça genre la boucle for ne sert a rien vu que tu prend que l'index 0 de ton mutable array si je devais corriger un truc rapidement dans ton code ça serait remplacer ça :
Le addObject, est bien effectuée, seulement en voulant effaçant certaines données inutiles de mon code pour vous je l'ai supprimé, mais il est bien présent dans le code
Sinon j'ai bien pris note de la modification suggérée et je vais la tester et te ferais un retour.
En tout cas merci à toi pour ces conseils et réponses
Bon il a pas l'air d'aimer le code que tu m'a envoyé. Je suis en synchrone (en attendant de trouver pourquoi le asynchrone déconne), et mon code passait très bien hier, et la avec ton code il me sors ça
2014-05-22 10:16:11.593 App[828:3c03] *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayI objectAtIndex:]: index 0 beyond bounds for empty array'
Oui l'erreur te dis que ton array est vide il faut juste ajouter une condition if (array non vide) {} ça devrait le faire pour ton code je viens de le tester chez moi en me faisant un script en php rapidos sur mon serveur et il marche très bien le problème vient pas de la. Moi je te conseille de log le strResult pour voir ce qu'il contient et toujours de sniffer la connexion via "Charles" ou un autre pour voir ce qui se passe c'est pas du temps perdu si tu connais pas le logiciel car c'est assez pratique de savoir s'en servir.
en tout cas vu ton message d'erreur je penses que ton strResult est vide essais de faire un :
Un problème à la fois. Déjà il faut que tu règle le souci du pass qui est null et la tu auras tes données qui remontent et ça sera déjà plus simple pour le reste (puis on verra si y a des gains de performance aussi). Ceci dis il est quand même un peu étrange qu'il n'y ai pas un système de retour de message d'erreur.
Ensuite pour revenir sur l'autre point de un la notation pointé n'est pas trop utilisé en objective c bien que ça commence a venir peu à peu il me semble.
Ben vu que tu as viré tout ton message on voit plus trop de quoi je parles effectivement bref tu faisais un
if (dicoTemp.count>0)
{
//Code ici
}
Or ça ne fonctionne pas parce que tu fais un :
NSDictionary *dicoTemp=[strResult objectAtIndex:0]; // ici strResult (qui est un array en passant pas une string) est vide == plantage ici
//Donc ton test arrive trop tard
if (dicoTemp.count=0) //Ton code n'arrive jamais ici.
{
}
Ce que tu aurais pu debugger facilement en créant un breakpoint qui léve toutes les exceptions.
Vaut mieux faire 5 messages à la suite plutot que 5 edit ? Okay je prends note.
Bref ma requete est toujours aussi longue a s'executer, et le traitement asynchrone ne marche toujours pas
Clairement oui car (1) les gens ne voient pas forcément les "EDIT" (ils ont peut-être chargé la page et sont en train de lire ton message avant que tu n'aies rajouté ton EDIT, et sont en train de répondre à ton message avant l'EDIT, etc) et (2) sinon on perd l'histoirique et on a des messages croisés impossible à suivre. 5 messages à la suite c'est bien mieux. Ou alors prendre le temps de chercher de ton côté et faire tes tests avant de poster à la va-vite pour éditer ensuite, c'est encore mieux.
Bon en fait en asynchrone je le répète il me met "Récupération de vos données" et ne m'affiche en aucun cas les données, j'ai juste le texte de base du label
Et le log des data? La on parle dans le vide je sais pas ce que tu veux ce qui marche ce qui marche pas je sais pas a quoi ressemble le code en fait on ne sait pas ou tu en est c'est pas facile de t'aider.
Personnellement la aussi je le répéte j'ai fait un bouchon rapide sur un serveur et j'ai copié collé ton code la seule chose que j'ai modifié c'est évidemment l'url pour que ça pointe sur mon serveur et j'ai viré les textField parce l'interface j'espère qu'elle fonctionne. Bref ça fonctionne parfaitement chez moi j'ai changé ensuite le NSOperationQueue et affiché un de mes retour dans un label pour voir et c'est relativement réactif de l'ordre du dixième de seconde (en même temps j'envoie presque rien)
Bref le code que tu nous as donné plus haut fonctionne si c'est pas le cas c'est que tu as changé un truc.
En tout cas ce que je vois la c'est que seul un debug ligne par ligne te diras quel variable ne contient pas ce qu'elle devrait contenir et te donnera une piste sur comment réagir la c'est pas du tout un souci sur un point technique mais bien un debugage pur et dure.
Ouais enfin quand je disais de faire des posts séparés...
Ou alors prendre le temps de chercher de ton côté et faire tes tests avant de poster à la va-vite pour éditer ensuite, c'est encore mieux.
Prend peut-être un peu le temps de rédiger ton post et de mettre de suite tout ce que tu veux dedans plutôt que de faire un post par phrase quand même.
Alors la seul chose a dire sur le strResult est null est que ton "data" n'est pas bon tu es censé faire une vérification dessus donc tu ne devrais pas pouvoir avoir un strResult à null.
Return Value
A Foundation object from the JSON data in data, or nil if an error occurs.
C'est la doc de JSONObjectWithData tu dois avoir une erreur dans ta variable "erreur"
Pour tous ceux qui me conseillaient d'utiliser Charles et qui doute de la fiabilité de la requête, je viens de discuter avec mon collègue, le serveur web et la requête marche très bien, et la requête se fait en moins d'une demi seconde sur Android
Pour tous ceux qui me conseillaient d'utiliser Charles et qui doute de la fiabilité de la requête, je viens de discuter avec mon collègue, le serveur web et la requête marche très bien, et la requête se fait en moins d'une demi seconde sur Android
Je doutais de la construction de la requête et c'est toujours super intéressant de voir les logs du serveur pour vérifier les paramètres reçues, et les réponses envoyées. Du moins, je m'en sers tout le temps en ruby... en php, je ne sais pas comment ça se passe.
Et non je te conseillais pas charles pour voir ce que le serveur te renvoyais mais bien pour voir le contenu de ta requête... Et si je me réfères à tes messages au dessus tu envoyais bien un password égale à null. Quand tu fais des requêtes sur un serveur premier point a vérifier "l'url est elle bonne" deuxième "les paramêtres sont ils bons" troisième "le serveur répond ou non?" après tu peux vérifier ton code. Pour moi ça revient a regarder si ton câble ethernet est branché avant de démonté ton réseau quand tu as plus internet sur ta machine.
Quand au temps d'execution de la requête d'autre outils sont fait pour ça et on a compris que ça ne venait pas de ça mais bien du fait que tu fasses des actions sur l'interface dans des threads secondaire. Bref déjà concentre toi sur le fait de récupérer tes données après on verra pour ce qui était ou pas des bonnes idées.
Réponses
Je t'avoue que le "débat" est ma foi fort très intéressant, et je prends note pour mes projets et expériences futurs, cependant mon problème de base n'est toujours pas réglé, donc je veut bien un peu d'aide s'il vous plait ^^
Pourrais-tu rappeler quel est ton " dernier soucis " ?
Parce que je vois beaucoup de lignes de code, et j'ai l'impression que certaines pourraient être occultées...
Genre, est-ce qu'on a besoin de lire toutes les lignes [arrayTemp addObject:XxX] ? La mise en place de la loading view ?
Voila le dernier problème en date, et merci de chercher à m'aider Larme
Dans ton for du deuxième block de code celui de l'asynchrone tu fais pas le
- [_list addObject:arrayTemp]
je sais pas si ça peut jouer mais vu que tu fais un test sur sa taille par le suite je penses que ça doit pas aider quand même.
Enfin je penses que tu peux arranger tout ça genre la boucle for ne sert a rien vu que tu prend que l'index 0 de ton mutable array si je devais corriger un truc rapidement dans ton code ça serait remplacer ça :
par ça :
Le addObject, est bien effectuée, seulement en voulant effaçant certaines données inutiles de mon code pour vous je l'ai supprimé, mais il est bien présent dans le code
Sinon j'ai bien pris note de la modification suggérée et je vais la tester et te ferais un retour.
En tout cas merci à toi pour ces conseils et réponses
Bon il a pas l'air d'aimer le code que tu m'a envoyé. Je suis en synchrone (en attendant de trouver pourquoi le asynchrone déconne), et mon code passait très bien hier, et la avec ton code il me sors ça
Oui l'erreur te dis que ton array est vide il faut juste ajouter une condition if (array non vide) {} ça devrait le faire pour ton code je viens de le tester chez moi en me faisant un script en php rapidos sur mon serveur et il marche très bien le problème vient pas de la. Moi je te conseille de log le strResult pour voir ce qu'il contient et toujours de sniffer la connexion via "Charles" ou un autre pour voir ce qui se passe c'est pas du temps perdu si tu connais pas le logiciel car c'est assez pratique de savoir s'en servir.
en tout cas vu ton message d'erreur je penses que ton strResult est vide essais de faire un :
En gros tu devrais recevoir un truc du genre de
Si il te renvoies pas ce que tu attends c'est a dire un array sous forme de json c'est que ton appel ne marche pas comme tu le souhaites.
Si il te renvoies ce que tu souhaites alors c'est la façon de gérer les données reçus qui est mauvaise.
Log aussi requestFields pour le cas où.
J'espère que ça aidera.
Bon c'est bon merci, ça n'empeche que mon traitement est toujours long (presque 20 secondes)
Un problème à la fois. Déjà il faut que tu règle le souci du pass qui est null et la tu auras tes données qui remontent et ça sera déjà plus simple pour le reste (puis on verra si y a des gains de performance aussi). Ceci dis il est quand même un peu étrange qu'il n'y ai pas un système de retour de message d'erreur.
Ensuite pour revenir sur l'autre point de un la notation pointé n'est pas trop utilisé en objective c bien que ça commence a venir peu à peu il me semble.
Moi je serais toi je tenterais un
Tu vas voir ça va faire des miracles.
J'ai édité juste quand tu postais, me demande pas pourquoi, ça remarche comme par miracle, il me récupère mail et mdp alors que je n'ai rien touché.
De quel autre point parle tu ?
Ben vu que tu as viré tout ton message on voit plus trop de quoi je parles effectivement bref tu faisais un
Or ça ne fonctionne pas parce que tu fais un :
Ce que tu aurais pu debugger facilement en créant un breakpoint qui léve toutes les exceptions.
Vaut mieux faire 5 messages à la suite plutot que 5 edit ? Okay je prends note.
Bref ma requete est toujours aussi longue a s'executer, et le traitement asynchrone ne marche toujours pas
Pour ton souci de 20 secondes essais de changer le
par
Bon en fait en asynchrone je le répète il me met "Récupération de vos données" et ne m'affiche en aucun cas les données, j'ai juste le texte de base du label
Pourtant quand je fais un log de requestFields, il me récupère bien le mail et le mot de passe.
En revanche mon strResult est null
Et le log des data? La on parle dans le vide je sais pas ce que tu veux ce qui marche ce qui marche pas je sais pas a quoi ressemble le code en fait on ne sait pas ou tu en est c'est pas facile de t'aider.
Personnellement la aussi je le répéte j'ai fait un bouchon rapide sur un serveur et j'ai copié collé ton code la seule chose que j'ai modifié c'est évidemment l'url pour que ça pointe sur mon serveur et j'ai viré les textField parce l'interface j'espère qu'elle fonctionne. Bref ça fonctionne parfaitement chez moi j'ai changé ensuite le NSOperationQueue et affiché un de mes retour dans un label pour voir et c'est relativement réactif de l'ordre du dixième de seconde (en même temps j'envoie presque rien)
Bref le code que tu nous as donné plus haut fonctionne si c'est pas le cas c'est que tu as changé un truc.
En tout cas ce que je vois la c'est que seul un debug ligne par ligne te diras quel variable ne contient pas ce qu'elle devrait contenir et te donnera une piste sur comment réagir la c'est pas du tout un souci sur un point technique mais bien un debugage pur et dure.
Alors la seul chose a dire sur le strResult est null est que ton "data" n'est pas bon tu es censé faire une vérification dessus donc tu ne devrais pas pouvoir avoir un strResult à null.
C'est la doc de JSONObjectWithData tu dois avoir une erreur dans ta variable "erreur"
Bon il y a de l'amélioration, puisqu'il ne cherche plus, il m'affiche mes labels vide.
Voici mon code:
Et voila mes Logs:
Déjà , il renvoie du HTML et pas du JSON.
Ensuite, faudrait voir les logs côté serveur (la requête reçue) et voir pourquoi ça ne semble pas authentifier.
Pour tous ceux qui me conseillaient d'utiliser Charles et qui doute de la fiabilité de la requête, je viens de discuter avec mon collègue, le serveur web et la requête marche très bien, et la requête se fait en moins d'une demi seconde sur Android
Ok j'ai trouvé tu appel "requestData" dans :
Or c'est le résultat du block que tu veux donc "data" :
Je doutais de la construction de la requête et c'est toujours super intéressant de voir les logs du serveur pour vérifier les paramètres reçues, et les réponses envoyées. Du moins, je m'en sers tout le temps en ruby... en php, je ne sais pas comment ça se passe.
Et non je te conseillais pas charles pour voir ce que le serveur te renvoyais mais bien pour voir le contenu de ta requête... Et si je me réfères à tes messages au dessus tu envoyais bien un password égale à null. Quand tu fais des requêtes sur un serveur premier point a vérifier "l'url est elle bonne" deuxième "les paramêtres sont ils bons" troisième "le serveur répond ou non?" après tu peux vérifier ton code. Pour moi ça revient a regarder si ton câble ethernet est branché avant de démonté ton réseau quand tu as plus internet sur ta machine.
Quand au temps d'execution de la requête d'autre outils sont fait pour ça et on a compris que ça ne venait pas de ça mais bien du fait que tu fasses des actions sur l'interface dans des threads secondaire. Bref déjà concentre toi sur le fait de récupérer tes données après on verra pour ce qui était ou pas des bonnes idées.
Bien vu effectivement Nasatya ça fonctionne correctement
Cependant le souci est toujours la, même en asynchrone ça me prends 20 secondes, alors que sur Android c'est moins d'une seconde.
La question c'est qu'est-ce qui prend 20 secondes... et pour ça tu as les outils dont a parlé plus haut.
Réference a quelques messages au dessus
Change ton
Par
Dans l'appel asynchrone ça devrait le faire