在外部库协议中添加和使用新方法时出现警告
我正在使用外部库,我的一个视图控制器正在注册为该框架中的类的委托。 现在,我想在这个委托类上执行一些代码。 我正在写一个方法,并在我的代理上调用它。
现在,一切工作正常,但我得到一个警告,这个新添加的方法不是协议的一部分。
这是我的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而不是直接调用方法将肯定会删除警告。