在外部库协议中添加和使用新方法时出现警告

我正在使用外部库,我的一个视图控制器正在注册为该框架中的类的委托。 现在,我想在这个委托类上执行一些代码。 我正在写一个方法,并在我的代理上调用它。

现在,一切工作正常,但我得到一个警告,这个新添加的方法不是协议的一部分。

这是我的class级:

@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

我想摆脱这个警告。 任何想法。

属性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]; } } 

写一个新的协议,延伸旧的,并符合,如下所示:

 @protocol MyNewProtocol <OtherProtocol> - (void) myCoolMethod; @end 
  • (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {if([self.libraryController.delegate respondsToSelector:@selector(actionTaken)]){[self.libraryController.delegate performSelector:@selector(actionTaken)]; }

使用performSelector而不是直接调用方法将肯定会删除警告。