ghostrider
ghostrider

Reputation: 5259

Prototype Cell has blank content on ios 7+

This one is driving me crazy - I don't know what am I missing.

here is my ViewController.

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.


    [self.tableView registerClass:[CurrentMatchCell class] forCellReuseIdentifier:@"CurrentMatchCell"];
    self.tableView.delegate = self;
    self.tableView.dataSource = self;

}

#pragma mark -
#pragma mark Table View Data Source Methods

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    NSLog(@"1");
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    NSLog(@"2");
    return 1;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    NSLog(@"3");

    CurrentMatchCell *cell = (CurrentMatchCell *)[tableView dequeueReusableCellWithIdentifier:@"CurrentMatchCell"];

    if (cell == nil) {
        NSLog(@"XXX");
    }
    [cell.matchDescription setText: @"Home Team vs Away Team"];

    return cell;
}

Here is screenshots from the app.

View Controller in scoreboard

delegate and datasource are set programmatically.

enter image description here

cell attributes :

enter image description here enter image description here

And the .h file :

@interface CurrentMatchesViewController : UIViewController <NSFetchedResultsControllerDelegate,UITableViewDelegate, UITableViewDataSource>

@property (weak, nonatomic) IBOutlet UITableView *tableView;

So, I can see logs 1,2,3 being printed out, cell is not nill but I do not see my content. Why is that?

I only see a number of empty white cells (even if I return 0 or whatever it does show the same every time).

Thanks

Upvotes: 0

Views: 75

Answers (2)

Chase
Chase

Reputation: 2304

It is because you're not loading your custom nib. Try this. (Make sure CurrentMatchCell is the name of your xib file).

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.


    UINib *nib = [UINib nibWithNibName:@"CurrentMatchCell" bundle:nil];
   [self.tableView registerNib:nib forCellReuseIdentifier:@"CurrentMatchCell"];

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

}

Edit: based on your comment: Don't register the custom cell class when using a storyboard.... it does that for you and it also sets the delegate. So try removing those lines from the viewdidload.... and second I would try actually making CurrentMatchesViewController a subclass of UITableViewController

Upvotes: 0

nikolovski
nikolovski

Reputation: 4049

If you create your table view and your cell prototypes in a storyboard, the storyboard loader takes care of registering the cell prototypes that you defined in the storyboard. So:

  1. You don't need to call registerClass:forCellReuseIdentifier: again in the code. This will actually mess up your storyboard settings.

  2. You can also use dequeueReusableCellWithIdentifier:forIndexPath: instead of dequeueReusableCellWithIdentifier:. That method always returns a cell, so you don't have to have a nil check.

Edit: If that doesn't do the trick, try calling [self.tableView reloadData] after setting the delegate / data source, or set the delegate and data source in the storyboard.

Upvotes: 1

Related Questions