2012-10-25 10 views
0

J'ai une chaîne qui obtient le contenu d'une URL. Im essayant de mettre ces contenus dans un tableau qui remplira une vue de table. Voici le code que j'ai. Qu'est-ce que je fais mal ici? Merci d'avance.Remplir un tableau avec le contenu d'un objet chaîne

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    NSString *strURL = [NSString stringWithFormat:@"http://10.247.245.87/index.php"]; 

    NSData *dataURL = [NSData dataWithContentsOfURL:[NSURL URLWithString:strURL]]; 

    NSString *strResult = [[NSString alloc] initWithData:dataURL encoding:NSUTF8StringEncoding]; 

    NSArray *nameArray = [[NSArray alloc]initWithContentsOfURL:<#(NSURL *)#>; 

    return nameArray.count; 

} 
+0

Comment voulez-vous remplir un tableau avec un chaîne? Est-ce le style .csv, avec différents éléments délimités par un certain caractère? –

+0

Quelle réponse obtenez-vous .. après avoir exécuté l'URL dans le navigateur ?? – AppleDelegate

+0

@AppleDelegate Je reçois une série de noms séparés par des virgules. –

Répondre

1

Je crois qu'il ya plusieurs façons de le faire, mais voici un moyen simple pour analyser les résultats JSON dans des tableaux. Téléchargez le framework SBJSON à partir du here et ajoutez-le à votre projet. Importez ensuite le fichier JSON.h sur votre #import "JSON.h". Après quoi vous pouvez analyser la chaîne dans un tableau en utilisant cette ligne de code nameArray = [responseString JSONValue];.

  1. Obtenez SBJSON à partir de here.
  2. Ajouter SBJSON à votre projet et l'importation JSON.h comme si #import "JSON.h"
  3. Parse à tableau comme si nameArray = [responseString JSONValue];

Bonne programmation!

EDIT: vous pouvez faire quelque chose comme ceci pour vérifier si vous avez un tableau de chaînes après vous analysez le JSON dans un tableau:

pour (NSString * myString dans tabNoms) {
NSLog (@ "% @", myString);
}

si les travaux ci-dessus, alors vous pouvez obtenir les chaînes du tableau et remplir le tableview dans le délégué cellForRowAtIndexPath comme ceci:

cell.textLabel.text = [nameArray objectAtIndex:indexPath.row]; 
+0

Merci pour l'aide! Je vais l'essayer et voir où ça va! –

+0

Ok cela a fonctionné pour déterminer combien de lignes il y aura basé sur combien de données il y a. Maintenant, j'ai besoin de montrer les données dans les lignes du tableau. Je sais que cela a à faire avec ceci: '- (UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) chemin d'index {UITableViewCell * cellule = [tableView dequeueReusableCellWithIdentifier: @" Cell "forIndexPath: chemin d'index]; static NSString * CellIdentifier = @ "Cell"; if (cellule = nil) { cellule = [[UITableViewCell alloc] initWithStyle: UITableViewCellStyleDefault reuseIdentifier: Identificateur de cellule]; } cellule de retour; } ' –

+0

De rien, laissez-moi savoir si vous avez besoin d'aide supplémentaire. Juste un heads up, si votre projet a ARC activé, vous devrez peut-être ajouter l'indicateur de compilateur - "fno-objc-arc" pour les fichiers de l'infrastructure SBJSON (il semble cependant y avoir une version ARC stable). – Sparq

0

Dans cette ligne:

return nameArray.count; 

vous obtiendrez toujours 0 parce que vous n'attendez réponse de Serwer.

+0

Lorsque j'ajoute cette ligne juste au-dessus de l'instruction "return" la fenêtre de débogage remplit tout immédiatement. NSLog (@ "% @", strResult); –

+1

Cette réponse est incorrecte. Quel que soit le thread sur lequel cette opération est effectuée, elle sera simplement suspendue jusqu'à ce qu'une réponse soit reçue du serveur. Si cela est fait sur le thread principal, le thread sera mis en pause. –

+0

@Rickay Merci d'avoir clarifié cela –

0

utiliser cette fonction après NSData ..

NSArray *array = [NSJSONSerialization JSONObjectWithData:dataURL options:NSJSONReadingAllowFragments error:nil]; 

return array; 
+1

Cette réponse me donne l'avertissement de compilation suivant: "Pointeur incompatible vers la conversion d'entier retournant 'NSArray * _strong' d'une fonction avec le type de résultat 'NSInteger' (alias 'int'); –