2009-09-30 13 views
1

Je travaille pour la première fois dans l'objectif c et j'ai rencontré un problème pour lequel je n'ai pas vu de réponse.Cocoa Touch UITableView Données

Je charge un ensemble de données à partir d'un ensemble de données JSON et l'utilise pour remplir un UITableView dans un UITableViewController.

D'abord, lorsque la vue est chargée (viewDidLoad), je remplis le tableau avec les données JSON d'une URL.

Ensuite, les données se chargent comme elles le devraient. numberOfRowsInSection montre qu'il y a 30 résultats dans le tableau qui est correct.

Cependant, l'Iphone charge l'ensemble entier trois fois dans la tableview.

Voici un code du contrôleur pour ce point de vue: (Twitter est utilisé comme un exemple et ne sont pas les données réelles je plaçai utiliser)

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    // Uncomment the following line to display an Edit button in the navigation bar for this view controller. 
    // self.navigationItem.rightBarButtonItem = self.editButtonItem; 
//results = [[NSMutableArray alloc] init]; 

[email protected]"public_timeline"; 
self.tableView.allowsSelection = NO; 
NSString *url = [[NSString alloc] init]; 
url = [[NSString alloc] initWithFormat:@"http://twitter.com/statuses/%s.json",@"public_timeline"]; 
if ([results count] == 0) { 
    [self parseJSON:url]; 
} 
    } 

Here is the parseJSON (actual parse is done with the Cocoa JSON framework 

    -(void) parseJSON:(NSString *)URL{ 
    NSURL *JSONURL = [NSURL URLWithString:URL]; 
    NSData *responseData = [[NSData alloc] initWithContentsOfURL:JSONURL]; 
    NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]; 
    results = [[NSMutableArray alloc] initWithArray:[responseString JSONValue]]; 
    } 


    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    return [results count]; 
    } 

puis la sortie de la cellule

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    static NSString *CellIdentifier = @"Cell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
    // Set up the cell... 
    } 
    NSDictionary *cdict = [results objectAtIndex:indexPath.row]; 
cell.textLabel.text = [cdict valueForKey:@"text"]; 
    return cell; 
} 

Je ne sais pas si ce que je fais est la meilleure façon de le faire, donc si quelqu'un pouvait m'aider, ce serait génial.

+0

par « chargement » trois fois voulez-vous dire que vous obtenez 3 copies de chaque cellule de tableau vue dans votre vue de table? Ou, êtes-vous témoin que votre point d'arrêt soit frappé 3 fois avant que votre table se charge? – Meltemi

+0

3 Des copies des données apparaissent dans les cellules de vue. – lrudor

Répondre

0

Vérifiez la numberOfSectionsInTableView Méthode et modifiez la valeur de retour à 1

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
    return 1; 
} 
Questions connexes