I have created .h and .m files for UITableView
called mainTableViewgm.h
and mainTableViewgm.m
resp. and I am calling -initWithFr
I can't believe I've been doing XCode programming for two years, and still hit this issue.
I had the same problem with XCode 6.1 - I was setting my UITableView
's delegate & dataSource in the viewWillAppear
function, but none of the delegate functions were kicking in.
However, if I right-clicked on the UITableView
on the Storyboard, the circles for delegate and dataSource were empty.
The solution, then, is to hold down the CTRL key, and drag from each of these circles up to the name of your UIView
which contains your UITableView
:
After doing this, my UITableView
happily populated itself.
(So, we're upto v6.1 of XCode now are we ? Do you think Apple ever going to make this thing, you know, friendly...? I would quite like to add a Bookmark in my code... that'd be a nice feature.)
Your tableview is not loaded when the controller is initializing, so you cannot do that in the init
methods. You have to move your code to the viewDidLoad
method.
Also you are not setting the delegate and datasource on the tableview object (probably a type, you are setting them on the view controller). It should look like this:
- (void)viewDidLoad:(BOOL)animated {
[super viewDidLoad:animated];
[self.tableView setDelegate:self];
[self.tableView setDataSource:self]; // <- This will trigger the tableview to (re)load it's data
}
Next thing is to implement the UITableViewDataSource methods correctly. UITableViewCell *cellOne =[[UITableViewCell alloc] init];
is not returning a valid cell object. You should use at least initWithStyle:
. And take a look how to use dequeueReusableCellWithIdentifier:forIndexPath:
. A typical implementation would look like this:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
// Reuse/create cell
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
// Update cell contents
cell.textLabel.text = @"Your text here";
cell.detailTextLabel.text=@"text did appear";
return cell;
}