cellForRowAtIndexPath问题:

时间:2012-05-01 03:09:51

标签: iphone objective-c ios ipad uitableview

我收到以下错误:

*** Terminating app due to uncaught exception 'NSRangeException', reason: '-[__NSCFArray objectAtIndex:]: index (0) beyond bounds (0)'
*** First throw call stack:
(0x372df88f 0x357e5259 0x372df789 0x372df7ab 0x372379c3 0x2a815d 0x2a6dad 0x339ec0a3 0x339eb181 0x339ea90b 0x3398f0df 0x3723e1fb 0x34216aa5 0x342166bd 0x3421a843 0x3421a57f 0x342124b9 0x372b3b1b 0x372b1d57 0x372b20b1 0x372354a5 0x3723536d 0x32142439 0x339b9e7d 0x3bf7 0x3ba8)
terminate called throwing an exceptionkill

这是我的代码:

#pragma mark -
#pragma mark Table view data source



- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    // Return the number of sections.
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    if (tableView.tag == kTableViewCatalog){
        NSLog(@"CATALOG IMAGES IS %d",[self.catalogImages_ count] );
        return [self.catalogImages_ count];
    } else if (tableView.tag == kTableViewFriends){
         NSLog(@"USER IMAGES IS %d",[self.userProfileImages_ count] );
        return [self.userProfileImages_ count];
    } else if (tableView.tag == kTableViewNews) {
         NSLog(@"STORIES IMAGES IS %d",[self.stories_ count] );
        return [self.stories_ count];
    }

    NSLog(@"OH NOO");
    return 0;
}

// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    NSInteger row = [indexPath row];

    NSString *CellIdentifier = @"NewsItemCellIdentifier";
    NewsItemCell *cell = (NewsItemCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[NewsItemCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
        //cell.newsRackController = self.newsRackController;
    }

    if (tableView.tag == kTableViewNews){
         NewsStory *story = [self.stories_ objectAtIndex:row];
        [cell setNewsStory:story];
        return cell;
    } else if (tableView.tag == kTableViewCatalog || tableView.tag == kTableViewFriends){
        [cell setNewsStory:nil];
        NewsStory *story = [NewsStory new];
        if (tableView.tag == kTableViewCatalog){
             NSLog(@"SETTING CELL FOR CATALOG");
            [cell setImageWithURL:[self.catalogImages_ objectAtIndex:indexPath.row]];
        } else if (tableView.tag == kTableViewFriends){
            NSLog(@"SETTING CELL FOR FRIENDS");
            [cell setImageWithURL:[self.userProfileImages_ objectAtIndex:indexPath.row]];
        }

        [story release];
        return cell;
    } 

    return nil;
}

#pragma mark -
#pragma mark Table view delegate

- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    return indexPath;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
//    self.currentIndexPath = indexPath;
//    [self tappedAtNewsItem:[self.stories_ objectAtIndex:[indexPath row]]];
    [tableView deselectRowAtIndexPath:indexPath animated:YES];

}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    if([indexPath row] < [self.stories_ count]) {
        return pageHeight;
    }
    return 0;
}

所以我在UITableViewCell子类中有一个tableView,由于某些原因,当我滚动时,我得到上面的错误。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

#pragma mark -
#pragma mark Table view data source

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    if (tableView.tag == kTableViewCatalog){
        NSLog(@"CATALOG IMAGES IS %d",[self.catalogImages_ count] ); 
//Check here how many elements in this array [self.catalogImages_] ?

        return [self.catalogImages_ count];
    } else if (tableView.tag == kTableViewFriends){
         NSLog(@"USER IMAGES IS %d",[self.userProfileImages_ count] );
//Check here how many elements in this array [self.userProfileImages_] ?

        return [self.userProfileImages_ count];
    } else if (tableView.tag == kTableViewNews) {
         NSLog(@"STORIES IMAGES IS %d",[self.stories_ count] );
//Check here how many elements in this array [self.stories_] ?

        return [self.stories_ count];
    }

else{
    NSLog(@"OH NOO");
    return 0;
}

}

// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    NSInteger row = [indexPath row];

    NSString *CellIdentifier = @"NewsItemCellIdentifier";
    NewsItemCell *cell = (NewsItemCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[NewsItemCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
        //cell.newsRackController = self.newsRackController;
    }

    if (tableView.tag == kTableViewNews){
         NewsStory *story = [self.stories_ objectAtIndex:row];
//Check here how many elements in this array [self.stories_] ?

        [cell setNewsStory:story];
        return cell;
    } else if (tableView.tag == kTableViewCatalog || tableView.tag == kTableViewFriends){
        [cell setNewsStory:nil];
        NewsStory *story = [NewsStory new];
        if (tableView.tag == kTableViewCatalog){
             NSLog(@"SETTING CELL FOR CATALOG");
            [cell setImageWithURL:[self.catalogImages_ objectAtIndex:indexPath.row]];
//Check here how many elements in this array [self.catalogImages_] ?

        } else if (tableView.tag == kTableViewFriends){
            NSLog(@"SETTING CELL FOR FRIENDS");
            [cell setImageWithURL:[self.userProfileImages_ objectAtIndex:indexPath.row]];
//Check here how many elements in this array [self.userProfileImages_] ?

        }

        [story release];
        return cell;
    } 

    return nil;
}

#pragma mark -
#pragma mark Table view delegate

- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    return indexPath;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
//    self.currentIndexPath = indexPath;
//    [self tappedAtNewsItem:[self.stories_ objectAtIndex:[indexPath row]]];
    [tableView deselectRowAtIndexPath:indexPath animated:YES];

}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    if([indexPath row] < [self.stories_ count]) {
        return pageHeight;
    }
    return 0;
}

// Check every where the size of each array. Actually the problem with you is this, the size is low of given array and you are trying to access beyond size. 

// numberOfRowsInSection ---> fixed with hard coded -- return 5; in each case.
 and fill your all arrays at least with 6 or 7 or more elements and then try .
I think you will get the main point.