I am trying to create an application in xcode that, like others, reads an rss feed and displays messages. I am new to objective-c, and sometimes it's a bit complicated.
I use NSMutableArray for retrieved stories (messages). Each story is represented by an NSMutableDictionary, which contains the title, subject, date and link of the message. All of them are displayed in the UITableView in the UIViewController. I set up my own cell, so I can display multiple shortcuts in them.
My problem is that if I use tableView: heightForRowAtIndexPath :, the first 5 cells (which are suitable for the screen) are displayed normally, but if you scroll down, the following cells will have the same content as the first 5 (that is, cells 0-4 displays OK , cell 5 has the contents of cell 0, cell 6 of cell 1, etc.)! If I remove tableView: heightForRowAtIndexPath: everything is just fine (except that I don't want to have a cell size)
This is what the code looks like:
// NavigationContentsViewController.h @interface NavigationContentsViewController : UIViewController <UITableViewDelegate, UITableViewDataSource> { UITableView *myTableView; IBOutlet UITableView * newsTable; UIActivityIndicatorView * activityIndicator; CGSize cellSize; NSXMLParser * rssParser; NSMutableArray * stories; NSMutableDictionary * item; // it parses through the document, from top to bottom... NSString * currentElement; NSMutableString * currentTitle, * currentDate, * currentSummary, * currentLink; } @property(nonatomic,retain)NSMutableArray *itemsList; @property(nonatomic,retain)UITableView *myTableView; - (void)parseXMLFileAtURL: (NSString *)URL;
.
//NavigationContentsViewController.m - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { // Configure the cell. static NSString *MyIdentifier = @"MyIdentifier"; CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:MyIdentifier]; if (cell == nil){ cell = [[[CustomCell alloc] initWithFrame:CGRectZero reuseIdentifier:MyIdentifier] autorelease]; // Set up the cell int storyIndex = indexPath.row; //[cell setText:[[stories objectAtIndex: storyIndex] objectForKey: @"title"]]; //Story title //cell.textLabel.text = [[stories objectAtIndex: storyIndex] objectForKey: @"title"]; //cell.textLabel.font = [UIFont boldSystemFontOfSize:14]; cell.lTitle.text = [[stories objectAtIndex: storyIndex] objectForKey: @"title"]; cell.lSummary.text = [[stories objectAtIndex: storyIndex] objectForKey: @"summary"]; cell.lDate.text = [[stories objectAtIndex: storyIndex] objectForKey: @"date"]; return cell; } return cell; } - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { NSString *selectedCellItem = [NSString stringWithFormat:@"%d", indexPath.row]; TableViewController *fvController = [[TableViewController alloc] initWithNibName:@"TableViewController" bundle:[NSBundle mainBundle]]; fvController.selectedCellItem = selectedCellItem; [self.navigationController pushViewController:fvController animated:YES]; [fvController release]; fvController = nil; } -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ return 80; }
Any clues? [EDIT: changed int storyIndex = indexPath.row;]