Tom Walters
Tom Walters

Reputation: 15616

Reload UITableView with a different number of rows

I've got a UITableView set up and working, and now I have a little issue. I need to reload the tableView's data whenever the view loads, and one thing which I can't get working is attempting to reload the data, when there was no data in the table view to begin with.

Basically the list is of variable length, and the contents are loaded from a file, what I want to know is, is there I way I can force the table to reload and not have it ignore the datasource methods, as is what happens whenever [tableView reloadData] is called.

Upvotes: 0

Views: 4122

Answers (3)

whenever the view loads

Where do you call reloadData? Do you call it in -viewDidLoad method? If yes it is probably incorrect, because -viewDidLoad is called only once - when view of the corresponding UIViewController is created (on the first usage). Maybe you should take a look at -viewWillAppear which is called(assuming correct usage of UIViewController) whenever view is going to be displayed.

The other possible reason is that if you do use -viewWillAppear (or -viewDidAppear) it is not triggered at all. This can happen if you use a custom UIViewController hierarchy. In that case you must call it with your own hands (there are exceptions - UINavigationController for example does this for you, but simple [someView addSubview:myController.view] doesn't).

Also please check if delegates are set correctly and tableView is not equal to nil (as you know messages to nil are just ignored).

Upvotes: 1

Amandir
Amandir

Reputation: 677

datasource methods aren't ignored when u call [tableView reloadData]; Did u set the IBOUTLET and the sources right?

Upvotes: 0

Mark Granoff
Mark Granoff

Reputation: 16938

[tableView reloadData] relies entirely on the data source methods! So, the only way you would see your data source methods beind ignored would be that you have not set the data source (and perhaps delegate) of your table view to be the object you want to be the data source. You can set these through Interface Builder, or programatically, e.g.:

tableView.dataSource = self;
tableView.delegate = self;

Upvotes: 2

Related Questions