2010-07-19 2 views
2

J'ai un UITableView régulier sans aucune section mise en place. Je suis en train de faire défiler automatiquement une ligne à un chemin d'index donné comme si ...UITableView scrollToRowAtIndexPath: aide

[table scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:[self getIndexToShow] inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:NO]; 

Mais quand je courais obtenir cette erreur ...

2010-07-19 18:07:58.391 Wrecking Ball[413:307] *** Terminating app due to uncaught exception 'NSRangeException', reason: '-[UITableView scrollToRowAtIndexPath:atScrollPosition:animated:]: section (0) beyond bounds (0).' 

Toute aide serait appréciée.

méthode délégué pour le nombre de sections ...

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
    return 1; 
} 
+0

Avez-vous des données dans votre source de données, à ce chemin d'index? –

+0

Oui, et j'ai même substitué un int tel que 0 au lieu de la méthode getIndexToShow juste au cas où il y aurait une erreur dans ma logique. – avizzini

+3

Si vous n'avez pas de sections, comment pouvez-vous avoir des lignes? Vous devez avoir au moins une section pour avoir des lignes, et pour faire défiler quelque chose. Pouvez-vous poster votre code pour vos méthodes de délégué de vue de table? –

Répondre

0

Voici mes méthodes de délégué ...

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

- (UITableViewCell *) getCellContentView:(NSString *)cellIdentifier { 

    CGRect CellFrame = CGRectMake(0, 0, 447, 210); 

    UILabel *levelName = [[UILabel alloc]initWithFrame:CGRectMake(170,6,280,17)]; 
    UILabel *levelStatus = [[UILabel alloc]initWithFrame:CGRectMake(170,25,280,17)]; 
    UILabel *levelTime = [[UILabel alloc]initWithFrame:CGRectMake(175,44,300,17)]; 
    UILabel *levelHeight = [[UILabel alloc]initWithFrame:CGRectMake(175,63,300,17)]; 
    UILabel *levelScore = [[UILabel alloc]initWithFrame:CGRectMake(175,82,300,17)]; 

    levelName.font = [UIFont fontWithName:@"Chalkduster" size:17.0f]; 
    levelStatus.font = [UIFont fontWithName:@"Chalkduster" size:17.0f]; 
    levelTime.font = [UIFont fontWithName:@"Chalkduster" size:17.0f]; 
    levelHeight.font = [UIFont fontWithName:@"Chalkduster" size:17.0f]; 
    levelScore.font = [UIFont fontWithName:@"Chalkduster" size:17.0f]; 

    levelName.textAlignment = UITextAlignmentCenter; 
    levelStatus.textAlignment = UITextAlignmentCenter; 

    levelName.backgroundColor = [UIColor clearColor]; 
    levelStatus.backgroundColor = [UIColor clearColor]; 
    levelTime.backgroundColor = [UIColor clearColor]; 
    levelHeight.backgroundColor = [UIColor clearColor]; 
    levelScore.backgroundColor = [UIColor clearColor]; 

    levelName.textColor = [UIColor whiteColor]; 
    levelStatus.textColor = [UIColor whiteColor]; 
    levelTime.textColor = [UIColor whiteColor]; 
    levelHeight.textColor = [UIColor whiteColor]; 
    levelScore.textColor = [UIColor whiteColor]; 

    levelName.tag = 1; 
    levelStatus.tag = 2; 
    levelTime.tag = 3; 
    levelHeight.tag = 4; 
    levelScore.tag = 5; 

    UITableViewCell *cell = [[[UITableViewCell alloc] initWithFrame:CellFrame reuseIdentifier:cellIdentifier] autorelease]; 

    [[cell contentView] addSubview:levelName]; 
    [[cell contentView] addSubview:levelStatus]; 
    [[cell contentView] addSubview:levelTime]; 
    [[cell contentView] addSubview:levelHeight]; 
    [[cell contentView] addSubview:levelScore]; 

    [levelName release]; 
    [levelStatus release]; 
    [levelTime release]; 
    [levelHeight release]; 
    [levelScore release]; 

    return cell; 
} 

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

    static NSString *CellIdentifier = @"Cell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

    if(cell == nil) 
     cell = [self getCellContentView:CellIdentifier]; 

    if([self levelCanBeShown:indexPath.row]) 
    { 

    GameCard *card = [[[WBManager sharedManager]currentUser]getGameCardForLevel:indexPath.row]; 

    UILabel *levelName = (UILabel *)[cell viewWithTag:1]; 
    UILabel *levelStatus = (UILabel *)[cell viewWithTag:2]; 
    UILabel *levelTime = (UILabel *)[cell viewWithTag:3]; 
    UILabel *levelHeight = (UILabel *)[cell viewWithTag:4]; 
    UILabel *levelScore = (UILabel *)[cell viewWithTag:5]; 

    levelName.text = [self getLevelStringForIntValue:indexPath.row]; 
    levelStatus.text = card.score <= 0 ? @"Incomplete" : @"Complete"; 

    if(card.score != 0) 
    { 
     levelScore.text = [NSString stringWithFormat:@"Score: %i",card.score]; 
     levelTime.text = [NSString stringWithFormat:@"Best Time: %i mins %i secs",card.time/60,card.time%60]; 
     levelHeight.text = [NSString stringWithFormat:@"Lowest Height: %i",card.height]; 
    } 

    else 
    { 
     levelScore.text = @"Score: -"; 
     levelTime.text = @"BestTime: -"; 
     levelHeight.text = @"Lowest Height: -"; 
    } 

    UIImage *screenshot = [[UIImage alloc]initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"WSimg%i",indexPath.row+1] ofType:@"PNG"]]; 

    cell.imageView.image = screenshot; 

    [screenshot release]; 

    } 

    else 
    { 
     UILabel *levelName = (UILabel *)[cell viewWithTag:1]; 
     UILabel *levelStatus = (UILabel *)[cell viewWithTag:2]; 
     UILabel *levelTime = (UILabel *)[cell viewWithTag:3]; 
     UILabel *levelHeight = (UILabel *)[cell viewWithTag:4]; 
     UILabel *levelScore = (UILabel *)[cell viewWithTag:5]; 

     levelName.text = [self getLevelStringForIntValue:indexPath.row]; 
     levelStatus.text = @"LOCKED"; 
     levelTime.text = @""; 
     levelHeight.text = @""; 
     levelScore.text = @""; 

     UIImage *screenshot = [[UIImage alloc]initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"WSimg%i",indexPath.row+1] ofType:@"PNG"]]; 

     cell.imageView.image = screenshot; 

     [screenshot release]; 
    } 

    return cell; 
} 

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    return 110; 
} 
+0

Pouvez-vous ajouter votre méthode '-numberOfSectionsInTableView:'? En aparté, vous devez éditer votre question originale pour ajouter du code. C'est la partie réponse de la page. Il suffit de cliquer sur "modifier" sous votre question pour l'éditer. –

+0

Jetez un coup d'œil à la liste des méthodes de délégation des sources de données ici: http://developer.apple.com/iphone/library/documentation/uikit/reference/UITableViewDataSource_Protocol/Reference/Reference.html#//apple_ref/occ/intfm/UITableViewDataSource/numberOfSectionsInTableView: –

+0

J'ai posté le -numberOfSectionsInTableView: ci-dessus. – avizzini

0

vous a fait reloadData avant que le défilement à ligne spécifique? voici le même problème avec slution, que je viens de mettre en œuvre et ça fonctionne bien :) uitableview scrolling solution