title: Creating manual segue correctly through storyboard and xcode
body: <p>I'm quite new to xcode, and I am trying to develop a sample app that is basically an embedded tableview which has many levels. I have a plist which stores the cells of each tableview. If the cells do not have children, then I want to be able to go to one detailed view once the cell is pressed. Eventually I want to be able to go to different detailed views depending on data type. To do this, I created a detailed view from storyboard, dragged my view controller to my detailed view to create a manual "Push" segue, and labeled the segue "segue1".</p>
  
  <p><strong>Edit:</strong> Source code <a href="http://www.4shared.com/zip/ufktZ6kq/DrillDown2.html?" rel="nofollow noreferrer">here</a></p>
  
  <p><img src="https://i.stack.imgur.com/wQKZd.png" alt="Building Manual Segue"></p>
  
  <p>Next I populate what I assumed to be the necessary functions for this to work, which is to call <code>[self performSegueWithIdentifier:@"segue1" sender:myString];</code> where myString is the title of the cell I selected.</p>
  
  <pre><code>- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
  {
      //Check the dictionary to see what cell was clicked
      NSDictionary *dict = [self.tableDataSource objectAtIndex:indexPath.row];
      NSString *myString = [dict objectForKey:@"Title"];
      NSDictionary *dictionary = [self.tableDataSource objectAtIndex:indexPath.row];
  
      NSArray *children = [dictionary objectForKey:@"Children"];
  
      //If there is no children, go to the detailed view
      if([children count] == 0)
      {
          [self performSegueWithIdentifier:@"segue1" sender:myString];
  
      }
      else{
          //Prepare to tableview.
          DrillDownViewController *rvController = [[DrillDownViewController alloc] initWithNibName:nil bundle:[NSBundle mainBundle]];
  
          //Increment the Current View
          rvController.CurrentLevel += 1;
  
          //Set the title;
          rvController.CurrentTitle = [dictionary objectForKey:@"Title"];
  
          //Push the new table view on the stack
          [self.navigationController pushViewController:rvController animated:YES];
  
          rvController.tableDataSource = children;
  
      }
  
  }
  </code></pre>
  
  <p>Finally, I called prepare for segue which looks for the segue labeled segue1.</p>
  
  <pre><code>-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
  {
      if([[segue identifier] isEqualToString:@"segue1"])
      {
          DrillDownDetailController *dvController = [[segue destinationViewController] visibleViewController];
          //DrillDownDetailController *dvController = [[DrillDownDetailController alloc] initWithNibName:nil bundle:[NSBundle mainBundle]];
          [dvController setItemName:(NSString *)sender];
          [self.navigationController pushViewController:dvController animated:YES];
      }
  }
  </code></pre>
  
  <p>I thought this would work, but for some reason, whenever the code reaches <code>[self performSegueWithIdentifier:@"segue1" sender:myString];</code>, it breaks with the error</p>
  
  <p>***** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Receiver () has no segue with identifier 'segue1''
  <strong>* First throw call stack:
  (0x14b4022 0xeb4cd6 0xdf61b 0x3590 0xa85c5 0xa87fa 0x93d85d 0x1488936 0x14883d7 0x13eb790 0x13ead84 0x13eac9b 0x139d7d8 0x139d88a 0x17626 0x23ed 0x2355 0x1)
  terminate called throwing an exception(lldb)</strong>  </p>
  
  <p>I can't figure out why it's telling me it can't find segue1 when it's already defined in storyboard and the code.</p>