-6

I know there are a lot similar questions and answers to this one, but I do not get it working. I want to pass the cellnumber in didSelectRowAtIndexPath (in MasterViewController) to viewDidLoad (in DetailViewController). Here is what I have:

    //MasterViewController.m:
    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    {

        UITableViewCell *cell=[tableView cellForRowAtIndexPath:indexPath];
        NSInteger num = indexPath.row;//cell.tag;

        DetailViewController *Second  = [[DetailViewController alloc] init];
        Second.number = num;

    }

    //DetailViewController.m:
    - (void)viewDidLoad
    {

        [super viewDidLoad];

        if(number == 0){

//show something
        } else if(number == 1){
    //show something else
            }
        [self configureView];
        }

How must I do this?

rmaddy
  • 314,917
  • 42
  • 532
  • 579
user1189952
  • 157
  • 4
  • 16

3 Answers3

0

Your code creates a new instance of DetailViewController in your didSelectRowAtIndexPath method. So, when the current instance of DetailViewController loads - the values will be nil.

Take a look at this SO answer for more detail explanation: Passing Data between View Controllers

Community
  • 1
  • 1
Robert J. Clegg
  • 7,231
  • 9
  • 47
  • 99
0

In - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    {

        UITableViewCell *cell=[tableView cellForRowAtIndexPath:indexPath];
        NSInteger num = indexPath.row;//cell.tag;

        DetailViewController *Second  = [[DetailViewController alloc] initWithNumber:indexPath.row];

    }

In DetailViewController.h :

@property (nonatomic) int number;
- (id)initWithNumber:(int)number;

In DetailViewController.m

- (id)initWithNumber:(int)number
{
   self.number = number;
}

- (void)viewDidLoad
{
   if(number == 0){

   } else if(number == 1){

   }

   [self configureView];

}
Fry
  • 6,235
  • 8
  • 54
  • 93
0
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    int num = indexPath.row;//cell.tag;
    DetailViewController *detailVC  = [[DetailViewController alloc] init];
    detailVC.number = num;
    [self.navigationController pushViewController:detailVC animated:YES];
}

DetailViewController.h

 @property (nonatomic, assign) int number;

DetailViewController.m

 @implementation DetailViewController
 @synthesize number;

 -(void)viewDidLoad:(BOOL)animated
 {
    [super viewDidLoad];         
    NSLog(@"Number:= %d",number);
 }

Hope this will help you!!

  • On the line [super viewDidLoad:animated]; I get the error No visible @interface for 'UiViewController' declares the selector 'viewDidLoad'. What causes this? – user1189952 Apr 15 '14 at 13:34
  • Oh.. It was my mistake. Write this line instead of it. [super viewDidLoad]; – Maitri Raval Apr 16 '14 at 05:28