Предупреждение при добавлении и использовании нового метода во внешнем библиотечном протоколе - PullRequest
2 голосов
/ 24 апреля 2011

Я использую внешнюю библиотеку, и один из моих контроллеров представления регистрируется как делегат для класса в этой структуре.Теперь в одном месте я хочу выполнить некоторый код в этом классе делегатов.Я пишу метод для этого и вызываю его у моего делегата.

Теперь все работает нормально, но я получаю предупреждение о том, что этот недавно добавленный метод не является частью протокола.

Это мой класс:

@protocol MyExtendedDelegate <LibraryDelegate>

@optional

- (void)actionTaken;

@end

@interface MyController : UITableController <MyExtendedDelegate> {  

}

@end

И внутри моего контроллера я регистрирую себя в качестве делегата для контроллера библиотеки

LibraryController *libController = [[LibraryController alloc] init];
    libController.delegate = self;

Наконец, это код из отдельного класса, где я вызываю этот метод:

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
    if ([self.libraryController.delegate respondsToSelector:@selector(actionTaken)]) {
        [self.libraryController.delegate actionTaken];
    }

Вот предупреждение, которое я получаю:

- actionTaken не найден в протоколе
- NSObject может не отвечать на actionTaken

Я хочу избавиться от этого предупреждения.Любая идея.

Ответы [ 3 ]

1 голос
/ 25 апреля 2011

Свойство libraryController.delegate определено во внешней библиотеке для соответствия LibraryDelegate.Попробуйте уменьшить значение до MyExtendedDelegate, прежде чем вызывать метод из расширенного протокола.

if ([self.libraryController.delegate conformsToProtocol:@protocol(MyExtendedDelegate)])
{
    id<MyExtendedDelegate> extendedDelegate = (id<MyExtendedDelegate>)self.libraryController.delegate;
    if ([extendedDelegate respondsToSelector:@selector(actionTaken)])
    {
        [extendedDelegate actionTaken];
    }
}
0 голосов
/ 15 мая 2011
  • (void) alertView: (UIAlertView *) alertView clickedButtonAtIndex: (NSInteger) buttonIndex {if ([self.libraryController.delegate RespondsToSelector: @selector (actionTaken)])) [[self.libraryControlelectordelegate]селектор (actionTaken)];}

Использование executeSelector вместо прямого вызова метода наверняка удалит предупреждение.

0 голосов
/ 24 апреля 2011

Напишите новый протокол, который расширяет старый и соответствует этому, что-то вроде:

@protocol MyNewProtocol <OtherProtocol>
   - (void) myCoolMethod;
@end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...