2015-01-28 4 views
-1

У меня проблема с протоколами Objective-C.Протокол не отвечает на селектор

Я определил протокол:

@protocol PlayerProfileSectionProReviewDelegate <NSObject> 

- (void)didReceivedPlayerProfileSectionProReviewData; 

@end 

@interface PlayerProfileSectionProReviewModel : PlayerProfileSectionModel 

@property (weak) id <PlayerProfileSectionProReviewDelegate> playerProfileSectionProReviewDelegate; 

@end 

В этой реализации класса я называю Делегат:

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

Является '_playerProfileSectionProReviewDelegate'' nil'? Кроме того, вы, вероятно, хотите определить 'playerProfileSectionProReviewDelegate' как свойство' weak'. –

+0

Да, '_playerProfileSectionProReviewDelegate' -' nil'! Как с этим бороться? –

+0

Вы определили свойство 'playerProfileSectionProReviewDelegate', но это просто свойство. Это похоже на название переменной - коробку для обуви. Вы не дали ему _value_. Если вы не сделаете какой-нибудь объект _be_ этим делегатом, там никого нет - обувная коробка пуста (ноль). – matt

ответ

0

Где-то в вашей реализации PlayerProfileSectionProReviewViewController класса, вам необходимо установить делегировать соответствующую PlayerProfileSectionProReviewModel объекта, например:

myModel.playerProfileSectionProReviewDelegate = self; 

Если вы сделаете это, то когда myModel достигает вашего делегата вызов, ваш контроллер представления получит его ,

Кстати, вы можете упростить эти строки:

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

С:

[self.playerProfileSectionProReviewDelegate didReceivedPlayerProfileSectionProReviewData]; 

На данный момент, если делегат nil, ни одно сообщение не будет отправлено, и вы не получите любая ошибка времени выполнения.

+0

Большое спасибо! Это была такая глупая ошибка, которая так долго занимала меня! –

Смежные вопросы