7

I have a class that implements the UICollectionViewDelegate protocol.

I'm using rac_signalForSelector: to register selection like this:

[self rac_signalForSelector:@selector(collectionView:didSelectItemAtIndexPath:)]

but it only fires if I leave in an empty implementation of collectionView:didSelectItemAtIndexPath: like this:

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
    // Empty
}

I tried with rac_signalForSelector:fromProtocol: as well without luck.

I'm using Reactive Cocoa 2.2.4

Thanks, Mikkel

Grav
  • 1,714
  • 14
  • 27

1 Answers1

18

Make sure you call -rac_signalForSelector: before you set your object as a delegate. Some Apple frameworks will check to see if your class responds to a certain delegate method selector when you set the delegate object, and cache that information, so if you haven't called -rac_signalForSelector: by that time and you don't explicitly implement the method, those delegate methods won't ever get called.

erikprice
  • 6,240
  • 3
  • 30
  • 40
  • 2
    There's a an inelegant but usable workaround: assign `nil` as the delegate and then reassign the real delegate object, which busts the selector caching. Do this if you use `-rac_signalForSelector:` after previously assigning a delegate. – Dave Lee Feb 25 '14 at 05:20