Protocol does not responds to selector

459 Views Asked by At

I have a problem with Objective-C protocols.

I have defined protocol:

@protocol PlayerProfileSectionProReviewDelegate <NSObject>

- (void)didReceivedPlayerProfileSectionProReviewData;

@end

@interface PlayerProfileSectionProReviewModel : PlayerProfileSectionModel

@property (weak) id <PlayerProfileSectionProReviewDelegate> playerProfileSectionProReviewDelegate;

@end

In this class implementation I call delegate:

if ([self.playerProfileSectionProReviewDelegate respondsToSelector:@selector(didReceivedPlayerProfileSectionProReviewData)])
{
    [self.playerProfileSectionProReviewDelegate didReceivedPlayerProfileSectionProReviewData];
}

In view controller I have added PlayerProfileSectionProReviewDelegate and overriden didReceivedPlayerProfileSectionProReviewData method:

@interface PlayerProfileSectionProReviewViewController : PlayerProfileSectionViewController <UITableViewDelegate, UITableViewDataSource, PlayerProfileSectionProReviewDelegate>

@end

and

#pragma mark <PlayerProfileSectionProReviewDelegate>

- (void)didReceivedPlayerProfileSectionProReviewData
{
    [self.playerProReviewTableView reloadData];
}

Why my protocol does not respond to selector?

1

There are 1 best solutions below

1
Romain On BEST ANSWER

Somewhere in your PlayerProfileSectionProReviewViewController class implementation, you need to set the appropriate PlayerProfileSectionProReviewModel object's delegate, like this:

myModel.playerProfileSectionProReviewDelegate = self;

If you do this, then when myModel reaches your delegate call, your view controller will receive it.

By the way, you can simplify these lines:

if ([self.playerProfileSectionProReviewDelegate respondsToSelector:@selector(didReceivedPlayerProfileSectionProReviewData)])
{
    [self.playerProfileSectionProReviewDelegate didReceivedPlayerProfileSectionProReviewData];
}

With:

[self.playerProfileSectionProReviewDelegate didReceivedPlayerProfileSectionProReviewData];

At this point if the delegate is nil, no message will be sent and you won't get any runtime error.