title: Generating error with trying to display results in UITableView from user search
body: <p>Generating an error below when trying to display results in UITableView from search performed by the user. The code below is searching, filtering and should be displaying the results. (But isn't)</p>
  
  <pre><code>@implementation ProductsViewController
  
  {
      NSPredicate *searchSearch;
      NSArray *results;
  }
  
  @synthesize bakeryTableView, bakeryProductArray, searchResults, itemName;
  
  -(void)viewDidLoad
  {
      bakeryProductArray = [[NSMutableArray alloc]init];
      searchResults = [[NSArray alloc]init];
      [self testermethod];
      [[self navigationController] setNavigationBarHidden:NO];
      [super viewDidLoad];
  }
  
  -(void)testermethod
  {
      PFQuery *query = [PFQuery queryWithClassName:self.parseClassName];
      // Retrieve the top songs by sales
      [query orderByAscending:@"Name"];
  
      // Limit to retrieving ten songs
      query.limit = 100;
      [query findObjectsInBackgroundWithBlock:^(NSArray *food, NSError *error) {
          if (error) return;
  
          // Songs now contains the last ten songs, and the band field has
          // been populated. For example:
          for (PFObject *song in food) {
  
              PFObject *simple = [song objectForKey:@"Name"];
  
              [bakeryProductArray addObject: simple];
          }
          [bakeryTableView reloadData];
          return;
          NSLog(@"Passed");
      }];
  }
  
  
  -(id)initWithCoder:(NSCoder *)aCoder {
      self = [super initWithCoder:aCoder];
      if (self) {
          self.parseClassName = @"JackiesBakeryProducts";
          self.textKey = @"objectid";
          self.pullToRefreshEnabled = YES;
          self.paginationEnabled = NO;
         // self.objectsPerPage = 20;
      }
  
      return self;
  }
  
  -(PFQuery *)queryForTable
  {
      PFQuery *query = [PFQuery queryWithClassName:self.parseClassName];
  
      // If no objects are loaded in memory, we look to the cache first to fill the table
      // and then subsequently do a query against the network.
      if ([self.objects count] == 0) {
          query.cachePolicy = kPFCachePolicyCacheThenNetwork;
      }
  
      [query orderByAscending:@"Name"];
  
      return query;
  }
  
  
  -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
  {
  
      //Fill table in with data
      static NSString *cellIdentifier = @"Cell";
      PFObject *selectedObject = [self objectAtIndexPath:indexPath];
      NSLog(@"%@", selectedObject);
      UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
  
      if (cell == nil) {
          cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier];
      }
  
      if (tableView == self.searchDisplayController.searchResultsTableView) {
  
              NSString *selectedObject = [searchResults objectAtIndex:indexPath.row];
              NSLog(@"%i", searchResults.count);
              cell.textLabel.text = selectedObject;
          }
  
      else {
  
          NSString *productName = [selectedObject objectForKey:@"Name"];
          NSString *productQuantity = [selectedObject objectForKey:@"Quantity"];
  
          cell.textLabel.text = productName;
          cell.detailTextLabel.text = productQuantity;
          cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
      }
  
      return cell;
  }
  
  #pragma mark - UITableView Delegate methods
  
  -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
  {
      //Deal with user search from tableview
      if (bakeryTableView == self.searchDisplayController.searchResultsTableView)
      {
  
          [self performSegueWithIdentifier: @"bakeryDetails" sender:self];
  
      }
  
      //Prep the next view controller with data from current view (data passing)
      detailedViewController *productinfo = [self.storyboard instantiateViewControllerWithIdentifier:@"bakeryDetails"];
  
      PFObject *selectedObject = [self objectAtIndexPath:indexPath];
  
      productinfo.productName = [selectedObject objectForKey:@"Name"];
      productinfo.productImage = [selectedObject objectForKey:@"ImageUrl"];
      productinfo.productDescription = [selectedObject objectForKey:@"Description"];
      productinfo.productPrice = [selectedObject objectForKey:@"Price"];
      productinfo.productQuantity = [selectedObject objectForKey:@"Quantity"];
      productinfo.productAllergy = [selectedObject objectForKey:@"Allergy"];
  
      [self.navigationController pushViewController:productinfo animated:YES];
      [bakeryTableView deselectRowAtIndexPath:indexPath animated:YES];
  
  }
  
  
  //Becareful here as wrong predicateWithFormat can crash app on keying in search
  -(void)filterContentForSearchText:(NSString *)searchText scope:(NSString *)scope
  {
  
      searchSearch = [NSPredicate predicateWithFormat:@"self CONTAINS[cd] %@",searchText];
      searchResults = [bakeryProductArray filteredArrayUsingPredicate:searchSearch];
  
      NSLog(@"Filtered Food Product Count --&gt; %d",[searchResults count]);
      NSLog(@"%@", searchResults);
  }
  
  
  -(BOOL)searchDisplayController:(UISearchDisplayController *)controller
  shouldReloadTableForSearchString:(NSString *)searchString
  {
      [self filterContentForSearchText:searchString
                                 scope:[[self.searchDisplayController.searchBar scopeButtonTitles]
                                        objectAtIndex:[self.searchDisplayController.searchBar
                                                       selectedScopeButtonIndex]]];
      return YES;
  
  }
  
  - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
  {
      // Check to see whether the normal table or search results table is being displayed and return the count from the appropriate array
      if (tableView == self.searchDisplayController.searchResultsTableView)
      {
          return [searchResults count];
      }
      else
      {
          return [bakeryProductArray count];
      }
  }
  
  - (void)didReceiveMemoryWarning
  {
      [super didReceiveMemoryWarning];
      // Dispose of any resources that can be recreated.
  }
  
  
  @end
  </code></pre>
  
  <p>With the above code. It is generating an error with <strong>* Terminating app due to uncaught exception 'NSRangeException', reason: '*</strong> -[__NSArrayI objectAtIndex:]: index 1 beyond bounds [0 .. 0]'
  (It does work search with the 1st character typed in but crashes with the second)</p>
  
  <p>I have rough idea that NSArray isn't working correctly when being called per index.row. But other than I don't know how to over come this. </p>
  
  <p>Used @try - catch statement to report back what was happening in the searchResults. It produced this</p>
  
  <pre><code>2013-09-08 13:27:20.876 jackies[995:c07] Filtered Food Product Count --&gt; 1
  2013-09-08 13:27:20.876 jackies[995:c07] Aero
  2013-09-08 13:27:20.877 jackies[995:c07] Caught this (
      Aero
  )
  2013-09-08 13:27:20.877 jackies[995:c07] Caught this (
      Aero
  )
  2013-09-08 13:27:20.877 jackies[995:c07] Caught this (
      Aero
  )
  2013-09-08 13:27:20.877 jackies[995:c07] Caught this (
      Aero
  )
  2013-09-08 13:27:20.877 jackies[995:c07] Caught this (
      Aero
  )
  2013-09-08 13:27:20.877 jackies[995:c07] Caught this (
      Aero
  )
  2013-09-08 13:27:20.878 jackies[995:c07] Caught this (
      Aero
  )
  2013-09-08 13:27:20.878 jackies[995:c07] Caught this (
      Aero
  )
  2013-09-08 13:27:32.550 jackies[995:c07] Filtered Food Product Count --&gt; 1
  2013-09-08 13:27:32.551 jackies[995:c07] Aero
  2013-09-08 13:27:32.551 jackies[995:c07] Caught this (
      Aero
  )
  2013-09-08 13:27:32.551 jackies[995:c07] Caught this (
      Aero
  )
  2013-09-08 13:27:32.551 jackies[995:c07] Caught this (
      Aero
  )
  2013-09-08 13:27:32.552 jackies[995:c07] Caught this (
      Aero
  )
  2013-09-08 13:27:32.552 jackies[995:c07] Caught this (
      Aero
  )
  2013-09-08 13:27:32.552 jackies[995:c07] Caught this (
      Aero
  )
  2013-09-08 13:27:32.552 jackies[995:c07] Caught this (
      Aero
  )
  2013-09-08 13:27:32.552 jackies[995:c07] Caught this (
      Aero
  )
  2013-09-08 13:27:34.188 jackies[995:c07] Filtered Food Product Count --&gt; 1
  2013-09-08 13:27:34.189 jackies[995:c07] Aero
  2013-09-08 13:27:34.189 jackies[995:c07] Caught this (
      Aero
  )
  2013-09-08 13:27:34.189 jackies[995:c07] Caught this (
      Aero
  )
  2013-09-08 13:27:34.189 jackies[995:c07] Caught this (
      Aero
  )
  2013-09-08 13:27:34.189 jackies[995:c07] Caught this (
      Aero
  )
  2013-09-08 13:27:34.189 jackies[995:c07] Caught this (
      Aero
  )
  2013-09-08 13:27:34.190 jackies[995:c07] Caught this (
      Aero
  )
  2013-09-08 13:27:34.190 jackies[995:c07] Caught this (
      Aero
  )
  2013-09-08 13:27:34.190 jackies[995:c07] Caught this (
      Aero
  )
  </code></pre>
  
  <p>Any help would be great.</p>