Note that there are some explanatory texts on larger screens.

plurals
  1. POUITableViewController: Data Parses but `numberOfRowsInSection:` returns NULL.
    primarykey
    data
    text
    <p>I have a UITableView populated by data parsed from xml. The parsing works but the table remains blank. </p> <p>The console shows that the xml form the url is parsed and shows its components. It also shows the number of objects that the rows of tableview should have when asked in a different function but the <code>numberOfRowsInSection:</code> is returning <code>Null</code>. Therefore, the tableView in the Simulator remains blank. </p> <p>Here is my code. It is simple code from a tutorial:</p> <p>+++++++++++++++++ RootViewController.h++++++++++++++++++++++</p> <pre><code>#import &lt; UIKit/UIKit.h &gt; @interface RootViewController : UITableViewController &lt; NSXMLParserDelegate &gt;{ IBOutlet UITableView *newsTable; UIActivityIndicatorView *activityIndicator; CGSize cellSize; NSXMLParser *rssParser; NSMutableArray *stories; NSMutableDictionary *item; NSString *currentElement; NSMutableString *currentTitle, *currentDate, *currentSummary, *currentLink; } @property (nonatomic, retain) NSMutableArray *stories; @property (nonatomic, retain) IBOutlet UITableView *newsTable; -(void)parseXMLFileAtURL:(NSString *)URL; @end +++++++++++++++++++++++++++ RootViewController.m ++++++++++++++++++++++++++++++++++++++ #import "RootViewController.h" @implementation RootViewController @synthesize newsTable, stories; -(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; } -(void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [newsTable reloadData]; } -(void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; if([stories count] == 0){ NSString *path = @"http://feeds.feedburner.com/TheAppleBlog"; [self parseXMLFileAtURL:path]; } cellSize = CGSizeMake([newsTable bounds].size.width, 60); } // Customize the number of sections in the table view. -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 1; } -(void)parseXMLFileAtURL:(NSString *)URL { stories = [[NSMutableArray alloc] init]; NSURL *xmlURL = [NSURL URLWithString:URL]; rssParser = [[NSXMLParser alloc] initWithContentsOfURL:xmlURL]; [rssParser setDelegate:self]; [rssParser setShouldProcessNamespaces:NO]; [rssParser setShouldReportNamespacePrefixes:NO]; [rssParser setShouldResolveExternalEntities:NO]; [rssParser parse]; } -(void)parserDidStartDocument:(NSXMLParser *)parser{ NSLog(@"Found file and started parsing"); } -(void) parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError{ NSString *errorString = [NSString stringWithFormat:@"Unable to download story feed from the website (error code %i)", [parseError code]]; NSLog(@"error parsing XML: %@", errorString); UIAlertView *errorAlert = [[UIAlertView alloc]:@"Error loading content" message:errorString delegate:self cancelButtonTitle:@"OK" otherButtonTitle:nil]; [errorAlert show]; } -(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{ NSLog(@"Found this Element %@", elementName); currentElement = [elementName copy]; if ([elementName isEqualToString:@"item"]) { item = [[NSMutableDictionary alloc] init]; currentTitle = [[NSMutableString alloc] init]; currentDate = [[NSMutableString alloc] init]; currentSummary = [[NSMutableString alloc] init]; currentLink = [[NSMutableString alloc] init]; } } -(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName { NSLog(@"End this Element %@", elementName); if ([elementName isEqualToString:@"item"]) { [item setObject:currentTitle forKey:@"title"]; [item setObject:currentLink forKey:@"link"]; [item setObject:currentSummary forKey:@"summary"]; [item setObject:currentDate forKey:@"date"]; [stories addObject:[item copy]]; NSLog(@"adding Story : %@",currentTitle); } } // Customize the number of rows in the table view. -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { NSLog(@"Count is = %@", [stories count]); return [stories count]; } -(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{ NSLog(@"Found characters: %@", string); if([currentElement isEqualToString:@"title"]){ [currentTitle appendString:string]; NSLog(@"The Title is : %@", currentTitle); } else if([currentElement isEqualToString:@"link"]){ [currentLink appendString:string]; NSLog(@"The Link is : %@", currentLink); } else if([currentElement isEqualToString:@"description"]){ [currentSummary appendString:string]; NSLog(@"The summary is : %@", currentSummary); } else if([currentElement isEqualToString:@"pubDate"]){ [currentDate appendString:string]; NSLog(@"The Date is : %@", currentDate); } } -(void)parserDidEndDocument:(NSXMLParser *)parser{ [activityIndicator stopAnimating]; [activityIndicator removeFromSuperview]; NSLog(@"Stories array has %d items", [stories count]); NSLog(@"Stories are : %@",stories); } // Customize the appearance of table view cells. -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *MyIdentifier = @"MyIdentifier"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier]; if (cell == nil) { cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:MyIdentifier] autorelease]; } // Configure the cell. cell.textLabel.text = (NSString *)[[stories objectAtIndex:indexPath.row] objectForKey:@"title"]; return cell; } -(void)dealloc { [super dealloc]; [newsTable release]; [currentDate release]; [currentElement release]; [currentSummary release]; [currentLink release]; [stories release]; [item release]; [currentTitle release]; [rssParser release]; } </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload