2010-06-10 12 views
0

J'ai une charge de mal à trouver comment faire cela,Création Drill-Down Détail UITableView de JSON NSDictionary

Je veux montrer dans un UITableDetailView (style Drill-Down) avec chaque élément dans un cellule différente. Toutes les choses que j'ai lues montrent comment charger une seule image sur le détail au lieu de l'afficher comme UITableView. Est-ce que le dictionnaire doit avoir des "enfants" pour charger correctement? Voici le code de la première vue créant * dict à partir de JSON rowsArray.

Je suppose que ce que je cherche est ce qu'il faut mettre dans le FollowDetailViewController.m pour voir le reste du contenu * dict, donc lors de la sélection d'une ligne, il charge le reste de la * dict.

Je rowsArray revenir comme suit:

« {LOGINNAME = Johnson;

memberid = 39;

nom = Kris;

age =;}, etc, etc ...

Merci,

// SET UP TABLE & CELLULES

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    static NSString *CellIdentifier = @"Cell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease]; 
} 
    NSDictionary *dict = [rowsArray objectAtIndex: indexPath.row]; 

    cell.textLabel.text = [dict objectForKey:@"name"]; 
    cell.detailTextLabel.text = [dict objectForKey:@"loginName"]; 
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; 
    return cell; 
} 

- (void)viewDidAppear:(BOOL)animated { 
     [super viewDidAppear:animated]; 



- (void)viewDidLoad { 
    [super viewDidLoad]; 

//GET JSON FROM WEBSERVICES: 
    NSURL *url = [NSURL URLWithString:@"http://10.0.1.8/~imac/iphone/jsontest.php"]; 
    NSString *jsonreturn = [[NSString alloc] initWithContentsOfURL:url]; 

    NSData *jsonData = [jsonreturn dataUsingEncoding:NSUTF32BigEndianStringEncoding]; 
NSError *error = nil; 

    NSDictionary * dict = [[CJSONDeserializer deserializer] deserializeAsDictionary:jsonData error:&error]; 
    if (dict) 
    { 
     rowsArray = [dict objectForKey:@"member"]; 
     [rowsArray retain]; 
    } 


[jsonreturn release]; 

} 

//GO TO DETAIL VIEW: 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    FollowingDetailViewController *aFollowDetail = [[FollowingDetailViewController alloc] initWithNibName:@"FollowingDetailView" bundle:nil]; 
    [self.navigationController pushViewController:aFollowDetail animated:YES]; 
} 

Répondre

0

Ne pas utiliser un appel de blocage pour récupérer le JSON . Si votre réseau est lent, votre application va se bloquer. Vous devez utiliser une méthode async pour récupérer les données.

Regardez dans le chargement du contenu JSON dans un objet modèle. Ensuite, utilisez un tableau de modèles pour alimenter votre tableview. DidSelectRowAtIndexPath peut ensuite passer une instance de l'objet de modèle dans votre vue détaillée, soit via un initialiseur personnalisé, soit en définissant une propriété après l'avoir allouée/init. Votre question est assez difficile à analyser, donc je ne suis pas sûr si je parle de ce que vous recherchez. Jetez un coup d'œil aux nombreux exemples de hiérarchies de l'interface utilisateur de la vue table sur le site du développeur.

+0

Merci, je suis penché vers votre méthode sur les deux points, Après avoir obtenu la table chargée, j'allais enregistrer la matrice à un .plist pour la persistance et recharger à partir de là lors du lancement. vérifier pour voir si les données étaient disponibles. Je peux enregistrer et utiliser le modèle objet JSON à la place, correct? –

+0

Je veux juste dire un objet modèle comme un nsObject générique adapté à vos besoins. Vous pourriez persister à plist, sqllite, données de base etc. – Nick