我对Objective-C协议有疑问。
我已经定义了协议:
@protocol PlayerProfileSectionProReviewDelegate <NSObject>
- (void)didReceivedPlayerProfileSectionProReviewData;
@end
@interface PlayerProfileSectionProReviewModel : PlayerProfileSectionModel
@property (weak) id <PlayerProfileSectionProReviewDelegate> playerProfileSectionProReviewDelegate;
@end
在这个类实现中,我调用delegate:
if ([self.playerProfileSectionProReviewDelegate respondsToSelector:@selector(didReceivedPlayerProfileSectionProReviewData)])
{
[self.playerProfileSectionProReviewDelegate didReceivedPlayerProfileSectionProReviewData];
}
在视图控制器中,我添加了PlayerProfileSectionProReviewDelegate
并覆盖了didReceivedPlayerProfileSectionProReviewData
方法:
@interface PlayerProfileSectionProReviewViewController : PlayerProfileSectionViewController <UITableViewDelegate, UITableViewDataSource, PlayerProfileSectionProReviewDelegate>
@end
和
#pragma mark <PlayerProfileSectionProReviewDelegate>
- (void)didReceivedPlayerProfileSectionProReviewData
{
[self.playerProReviewTableView reloadData];
}
为什么我的协议不响应选择器?
答案 0 :(得分:0)
在PlayerProfileSectionProReviewViewController
类实现的某个地方,您需要设置相应的PlayerProfileSectionProReviewModel
对象的委托,如下所示:
myModel.playerProfileSectionProReviewDelegate = self;
如果你这样做,那么当myModel
到达你的委托电话时,你的视图控制器就会收到它。
顺便说一句,你可以简化这些行:
if ([self.playerProfileSectionProReviewDelegate respondsToSelector:@selector(didReceivedPlayerProfileSectionProReviewData)])
{
[self.playerProfileSectionProReviewDelegate didReceivedPlayerProfileSectionProReviewData];
}
使用:
[self.playerProfileSectionProReviewDelegate didReceivedPlayerProfileSectionProReviewData];
此时,如果委托是nil
,则不会发送任何消息,也不会出现任何运行时错误。