collectionView:cellForItemAtIndexPath: never gets called

ios, uicollectionview, uicollectionviewcell

Solution

I was having a similar problem. `cellForItemAtIndexPath` was not being called. After pulling out my hair for several minutes, I removed the `collectionView` `registerClass:forCellWithReuseIdentifier` from the `viewDidLoad` method.

After doing that, `cellForItemAtIndexPath` began to get called.

I hope this helps.

Problem

I have a UICollectionView and I simply want it to show up. I have the delegate and datasource attached to the file's owner in the interface builder. ``` collectionView:numberOfItemsInSection: ``` Gets called just fine. I have been messing with this for a few hours and just can't figure it out... Any help would be great, Thanks in advance! Here is the full source. Sorry if its kinda messy. .h File ``` #import <UIKit/UIKit.h> #import <MapKit/MapKit.h> #import "PinAnnotation.h" #import "Jot.h" @interface JotCardViewController : UIViewController <MKMapViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout> @property (nonatomic,strong) Jot* jot; @end ``` .m file ``` #import "JotCardViewController.h" #import "JotViewController.h" #import <QuartzCore/QuartzCore.h> @interface JotCardViewController () @property (nonatomic,strong) JotViewController *detailViewController; @property (nonatomic,strong) IBOutlet UIView *cardFrontView; @property (nonatomic,assign,getter = isFlipped) BOOL flipped; @property (nonatomic,weak) IBOutlet MKMapView *mapView; @property (nonatomic,strong) IBOutlet UICollectionView *collectionView; @property (nonatomic,weak) IBOutlet UILabel *jotTitle; @property (nonatomic,weak) IBOutlet UILabel *jotDate; @property (nonatomic,weak) IBOutlet UILabel *sunriseSunsetDelta; @property (nonatomic,weak) IBOutlet UILabel *jotNotes; @end @implementation JotCardViewController - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // Custom initialization } return self; } - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view from its nib. [[self mapView] setRegion:MKCoordinateRegionMakeWithDistance(CLLocationCoordinate2DMake([self.jot.latitude floatValue], [self.jot.longitude floatValue]), 1000, 1000)]; //TODO: if there is no jot location - say that their isn't (maybe text over the map display) CLLocation *tempLocation = [[CLLocation alloc] initWithCoordinate:CLLocationCoordinate2DMake([self.jot.latitude doubleValue], [self.jot.longitude doubleValue]) altitude:0 horizontalAccuracy:0 verticalAccuracy:0 timestamp:nil]; [self dropPin:tempLocation]; [self.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"Cell"]; [self.collectionView reloadData]; } - (void) viewWillAppear:(BOOL)animated { [self refreshUIFromJot]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } - (IBAction)flipToDetails:(id)sender { if (![self isFlipped]) { if (!self.detailViewController) { JotViewController *jotViewController = [[JotViewController alloc] initWithNibName:@"JotView" bundle:[NSBundle mainBundle]]; jotViewController.jot = self.jot; self.detailViewController = jotViewController; self.detailViewController.view.frame = self.cardFrontView.frame; self.detailViewController.view.layer.cornerRadius = 10.0; } [UIView transitionFromView:self.cardFrontView toView:self.detailViewController.view duration:0.33 options:UIViewAnimationOptionCurveLinear |UIViewAnimationOptionTransitionFlipFromRight completion:^(BOOL finished) { [self setFlipped:YES]; }]; } else { [UIView transitionFromView:self.detailViewController.view toView:self.cardFrontView duration:0.33 options:UIViewAnimationOptionCurveLinear |UIViewAnimationOptionTransitionFlipFromLeft completion:^(BOOL finished) { [self setFlipped:NO]; }]; } } - (void) setJot:(Jot *) jot { _jot = jot; [self refreshUIFromJot]; } - (void) refreshUIFromJot { [[self jotTitle] setText:self.jot.summary]; [[self jotDate] setText:self.jot.recorddate]; [[self jotNotes] setText:self.jot.note]; [[self sunriseSunsetDelta] setText:@""]; } -(void) dropPin: (CLLocation*)newLocation{ for (id<MKAnnotation> pin in self.mapView.annotations){ MKAnnotationView* anView = [self.mapView viewForAnnotation: pin]; if (anView){ [self.mapView removeAnnotation:pin]; NSLog(@"Pin removed"); } } PinAnnotation *pin = [[PinAnnotation alloc] initWithCoordinates:newLocation.coordinate placeName:nil description:nil]; [self.mapView addAnnotation:pin]; } #pragma mark - MKMapViewDelegate methods - (void) mapViewDidFinishLoadingMap:(MKMapView *)mapView { NSLog(@"Map!"); } #pragma mark - UICollectionView DataSource - (NSInteger)collectionView:(UICollectionView *)view numberOfItemsInSection:(NSInteger)section { return 1; } - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"Cell" forIndexPath:indexPath]; //cell.backgroundColor = [UIColor colorWithPatternImage:[self.results objectAtIndex:indexPath.row]]; return cell; //### /* NSSet *jotImages = self.jot.images; NSSortDescriptor *imageNameDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"imageName" ascending:YES]; NSArray *sortedJotImages = [jotImages sortedArrayUsingDescriptors:@[imageNameDescriptor]]; */ //### } #pragma mark - UICollectionViewDelegate - (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { // TODO: Select Item } - (void)collectionView:(UICollectionView *)collectionView didDeselectItemAtIndexPath:(NSIndexPath *)indexPath { // TODO: Deselect item } #pragma mark – UICollectionViewDelegateFlowLayout - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { CGSize retval = CGSizeMake(100, 100); return retval; } - (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section { return UIEdgeInsetsMake(50, 20, 50, 20); } @end ```

Original source