Avba
Avba

Reputation: 15296

UITableview doesn't call cellForRowAtIndexPath

The first time the view controller is pushed (from the previous view controller) all the delegate methods are called (inside a navigation controller).

When pressing back to return to the previous view controller , and then pushing it again (for the second time)

cellForRowAtIndexPath isn't called but numberOfRowsInSection and numberOfSectionsInTableView are called.

The reloadData is called within

-(void)viewWillAppear:(BOOL)animated
{
    [self.tableView reloadData];
}

and I have tried in

-(void)viewDidAppear:(BOOL)animated
{
    [self.tableView reloadData];
}

and it doesn't help.

Edit

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return 1; // called
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 3; // called
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    // relevant code for cell - THIS METHOD IS NOT CALLED SECOND TIME
}

Upvotes: 2

Views: 3109

Answers (3)

Yoku
Yoku

Reputation: 307

If you don't find any valid reason as explained above I will highlight another mistake one can make is (as I once did).

The steps to note are

1) initialise your custom table view as first step 2) set the delegate and datasource before you add the tableView to you view.

If one has done these steps mistakenly after adding to the tableview to your self.view object, then it would be a silent way to make yourself struggle.Correct order is as under:

self.myTableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0,    myViewwidth, 120) style:UITableViewStylePlain];
self.myTableView.tag = MY_TABLEVIEW_TAG;
self.myTableView.delegate = self;
self.myTableView.dataSource = self; 
[self.view addSubview:self.myTableView];

Upvotes: 1

Irfan
Irfan

Reputation: 4331

Please check if you have set/connected Delegate and Datasource to the File's Owner.

And check the array count of your model, if it contains value of not?

NSLog in the numberOfRowsInSection method and check it by using breakpoints and step over.

Upvotes: 0

M. Porooshani
M. Porooshani

Reputation: 1837

This always happens when you define your underlying data source (array or Dictionary) as weak, the first time it gets pushed, the data is there, when deallocated, it will release and you lose control over it.

Double check the weak/strong condition and optionally set the data source before pushing again.

Upvotes: 0

Related Questions