协议不响应选择器

时间:2015-01-28 23:25:15

标签: ios objective-c-protocol

我对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];
}

为什么我的协议不响应选择器?

1 个答案:

答案 0 :(得分:0)

PlayerProfileSectionProReviewViewController类实现的某个地方,您需要设置相应的PlayerProfileSectionProReviewModel对象的委托,如下所示:

myModel.playerProfileSectionProReviewDelegate = self;

如果你这样做,那么当myModel到达你的委托电话时,你的视图控制器就会收到它。

顺便说一句,你可以简化这些行:

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

使用:

[self.playerProfileSectionProReviewDelegate didReceivedPlayerProfileSectionProReviewData];

此时,如果委托是nil,则不会发送任何消息,也不会出现任何运行时错误。